@nifrajs/cli 3.3.0 → 4.0.0

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 (425) hide show
  1. package/README.md +42 -3
  2. package/dist/app-files.d.ts +11 -0
  3. package/dist/app-files.d.ts.map +1 -0
  4. package/dist/app-files.js +34 -0
  5. package/dist/app-files.js.map +1 -0
  6. package/dist/assure-hydration.d.ts +7 -1
  7. package/dist/assure-hydration.d.ts.map +1 -1
  8. package/dist/assure-hydration.js +128 -43
  9. package/dist/assure-hydration.js.map +1 -1
  10. package/dist/assure.d.ts.map +1 -1
  11. package/dist/assure.js +16 -2
  12. package/dist/assure.js.map +1 -1
  13. package/dist/capabilities-tool.d.ts +5 -1
  14. package/dist/capabilities-tool.d.ts.map +1 -1
  15. package/dist/capabilities-tool.js +32 -10
  16. package/dist/capabilities-tool.js.map +1 -1
  17. package/dist/cdn-check.d.ts +41 -0
  18. package/dist/cdn-check.d.ts.map +1 -0
  19. package/dist/cdn-check.js +207 -0
  20. package/dist/cdn-check.js.map +1 -0
  21. package/dist/check-diagnostics.d.ts +7 -15
  22. package/dist/check-diagnostics.d.ts.map +1 -1
  23. package/dist/check-diagnostics.js +162 -713
  24. package/dist/check-diagnostics.js.map +1 -1
  25. package/dist/check-scan.d.ts +58 -7
  26. package/dist/check-scan.d.ts.map +1 -1
  27. package/dist/check-scan.js +323 -62
  28. package/dist/check-scan.js.map +1 -1
  29. package/dist/check.d.ts +1 -0
  30. package/dist/check.d.ts.map +1 -1
  31. package/dist/check.js +145 -54
  32. package/dist/check.js.map +1 -1
  33. package/dist/cli.d.ts +42 -16
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/cli.js +306 -87
  36. package/dist/cli.js.map +1 -1
  37. package/dist/command-catalog.d.ts +60 -5
  38. package/dist/command-catalog.d.ts.map +1 -1
  39. package/dist/command-catalog.js +298 -33
  40. package/dist/command-catalog.js.map +1 -1
  41. package/dist/config-target.d.ts +8 -0
  42. package/dist/config-target.d.ts.map +1 -0
  43. package/dist/config-target.js +45 -0
  44. package/dist/config-target.js.map +1 -0
  45. package/dist/contracts.d.ts +3 -2
  46. package/dist/contracts.d.ts.map +1 -1
  47. package/dist/contracts.js +56 -16
  48. package/dist/contracts.js.map +1 -1
  49. package/dist/db-audit.d.ts +37 -0
  50. package/dist/db-audit.d.ts.map +1 -0
  51. package/dist/db-audit.js +99 -0
  52. package/dist/db-audit.js.map +1 -0
  53. package/dist/db-child.d.ts +64 -0
  54. package/dist/db-child.d.ts.map +1 -0
  55. package/dist/db-child.js +213 -0
  56. package/dist/db-child.js.map +1 -0
  57. package/dist/db-config.d.ts +60 -0
  58. package/dist/db-config.d.ts.map +1 -0
  59. package/dist/db-config.js +176 -0
  60. package/dist/db-config.js.map +1 -0
  61. package/dist/db-tool.d.ts +84 -0
  62. package/dist/db-tool.d.ts.map +1 -0
  63. package/dist/db-tool.js +537 -0
  64. package/dist/db-tool.js.map +1 -0
  65. package/dist/dev-bun-config.d.ts +20 -13
  66. package/dist/dev-bun-config.d.ts.map +1 -1
  67. package/dist/dev-bun-config.js +98 -41
  68. package/dist/dev-bun-config.js.map +1 -1
  69. package/dist/dev-feed-tool.d.ts +106 -0
  70. package/dist/dev-feed-tool.d.ts.map +1 -0
  71. package/dist/dev-feed-tool.js +713 -0
  72. package/dist/dev-feed-tool.js.map +1 -0
  73. package/dist/dev-server-client.d.ts +67 -0
  74. package/dist/dev-server-client.d.ts.map +1 -0
  75. package/dist/dev-server-client.js +195 -0
  76. package/dist/dev-server-client.js.map +1 -0
  77. package/dist/diagnostics.d.ts +86 -0
  78. package/dist/diagnostics.d.ts.map +1 -1
  79. package/dist/diagnostics.js +85 -0
  80. package/dist/diagnostics.js.map +1 -1
  81. package/dist/diff-tool.d.ts +3 -3
  82. package/dist/diff-tool.d.ts.map +1 -1
  83. package/dist/diff-tool.js +6 -5
  84. package/dist/diff-tool.js.map +1 -1
  85. package/dist/docs-search.d.ts.map +1 -1
  86. package/dist/docs-search.js +12 -4
  87. package/dist/docs-search.js.map +1 -1
  88. package/dist/doctor.d.ts +17 -0
  89. package/dist/doctor.d.ts.map +1 -1
  90. package/dist/doctor.js +76 -15
  91. package/dist/doctor.js.map +1 -1
  92. package/dist/env-file.d.ts +15 -0
  93. package/dist/env-file.d.ts.map +1 -1
  94. package/dist/env-file.js +73 -1
  95. package/dist/env-file.js.map +1 -1
  96. package/dist/fix-recipes.d.ts.map +1 -1
  97. package/dist/fix-recipes.js +41 -21
  98. package/dist/fix-recipes.js.map +1 -1
  99. package/dist/frontend-guidance.js +5 -5
  100. package/dist/frontend-guidance.js.map +1 -1
  101. package/dist/i18n-check.d.ts +16 -0
  102. package/dist/i18n-check.d.ts.map +1 -0
  103. package/dist/i18n-check.js +154 -0
  104. package/dist/i18n-check.js.map +1 -0
  105. package/dist/init-agents.d.ts +49 -13
  106. package/dist/init-agents.d.ts.map +1 -1
  107. package/dist/init-agents.js +239 -34
  108. package/dist/init-agents.js.map +1 -1
  109. package/dist/internal/code-unit-order.d.ts +4 -0
  110. package/dist/internal/code-unit-order.d.ts.map +1 -0
  111. package/dist/internal/code-unit-order.js +6 -0
  112. package/dist/internal/code-unit-order.js.map +1 -0
  113. package/dist/internal/script-kind.d.ts +7 -0
  114. package/dist/internal/script-kind.d.ts.map +1 -0
  115. package/dist/internal/script-kind.js +12 -0
  116. package/dist/internal/script-kind.js.map +1 -0
  117. package/dist/internal/source-facts.d.ts +5 -0
  118. package/dist/internal/source-facts.d.ts.map +1 -1
  119. package/dist/internal/source-facts.js +61 -5
  120. package/dist/internal/source-facts.js.map +1 -1
  121. package/dist/internal/typescript-import.d.ts +49 -24
  122. package/dist/internal/typescript-import.d.ts.map +1 -1
  123. package/dist/internal/typescript-import.js +507 -67
  124. package/dist/internal/typescript-import.js.map +1 -1
  125. package/dist/introspect.d.ts +6 -4
  126. package/dist/introspect.d.ts.map +1 -1
  127. package/dist/introspect.js +93 -74
  128. package/dist/introspect.js.map +1 -1
  129. package/dist/learn.js +3 -3
  130. package/dist/learn.js.map +1 -1
  131. package/dist/levels-tool.d.ts +10 -0
  132. package/dist/levels-tool.d.ts.map +1 -1
  133. package/dist/levels-tool.js +33 -3
  134. package/dist/levels-tool.js.map +1 -1
  135. package/dist/load.d.ts +71 -16
  136. package/dist/load.d.ts.map +1 -1
  137. package/dist/load.js +78 -18
  138. package/dist/load.js.map +1 -1
  139. package/dist/manifest-tool.d.ts.map +1 -1
  140. package/dist/manifest-tool.js +3 -2
  141. package/dist/manifest-tool.js.map +1 -1
  142. package/dist/mcp-app-tool.d.ts.map +1 -1
  143. package/dist/mcp-app-tool.js +2 -0
  144. package/dist/mcp-app-tool.js.map +1 -1
  145. package/dist/mcp-context.d.ts.map +1 -1
  146. package/dist/mcp-context.js +5 -6
  147. package/dist/mcp-context.js.map +1 -1
  148. package/dist/mcp-delegate.d.ts +57 -0
  149. package/dist/mcp-delegate.d.ts.map +1 -0
  150. package/dist/mcp-delegate.js +130 -0
  151. package/dist/mcp-delegate.js.map +1 -0
  152. package/dist/mcp-docs-tools.d.ts.map +1 -1
  153. package/dist/mcp-docs-tools.js +23 -5
  154. package/dist/mcp-docs-tools.js.map +1 -1
  155. package/dist/mcp-exec.d.ts +3 -0
  156. package/dist/mcp-exec.d.ts.map +1 -1
  157. package/dist/mcp-exec.js +263 -131
  158. package/dist/mcp-exec.js.map +1 -1
  159. package/dist/mcp-http.d.ts.map +1 -1
  160. package/dist/mcp-http.js +20 -5
  161. package/dist/mcp-http.js.map +1 -1
  162. package/dist/mcp-io.d.ts +26 -0
  163. package/dist/mcp-io.d.ts.map +1 -1
  164. package/dist/mcp-io.js +113 -0
  165. package/dist/mcp-io.js.map +1 -1
  166. package/dist/mcp-isolate.d.ts +48 -0
  167. package/dist/mcp-isolate.d.ts.map +1 -0
  168. package/dist/mcp-isolate.js +222 -0
  169. package/dist/mcp-isolate.js.map +1 -0
  170. package/dist/mcp-path.d.ts +10 -0
  171. package/dist/mcp-path.d.ts.map +1 -0
  172. package/dist/mcp-path.js +51 -0
  173. package/dist/mcp-path.js.map +1 -0
  174. package/dist/mcp-project-child.d.ts +74 -0
  175. package/dist/mcp-project-child.d.ts.map +1 -0
  176. package/dist/mcp-project-child.js +130 -0
  177. package/dist/mcp-project-child.js.map +1 -0
  178. package/dist/mcp-reflect.d.ts.map +1 -1
  179. package/dist/mcp-reflect.js +2 -2
  180. package/dist/mcp-reflect.js.map +1 -1
  181. package/dist/mcp-render.d.ts.map +1 -1
  182. package/dist/mcp-render.js +64 -45
  183. package/dist/mcp-render.js.map +1 -1
  184. package/dist/mcp-root.d.ts +37 -9
  185. package/dist/mcp-root.d.ts.map +1 -1
  186. package/dist/mcp-root.js +124 -25
  187. package/dist/mcp-root.js.map +1 -1
  188. package/dist/mcp-run.d.ts +18 -1
  189. package/dist/mcp-run.d.ts.map +1 -1
  190. package/dist/mcp-run.js +159 -55
  191. package/dist/mcp-run.js.map +1 -1
  192. package/dist/mcp-ws.js +4 -1
  193. package/dist/mcp-ws.js.map +1 -1
  194. package/dist/mcp.d.ts +18 -5
  195. package/dist/mcp.d.ts.map +1 -1
  196. package/dist/mcp.js +165 -82
  197. package/dist/mcp.js.map +1 -1
  198. package/dist/migrate-layout.d.ts +44 -0
  199. package/dist/migrate-layout.d.ts.map +1 -0
  200. package/dist/migrate-layout.js +982 -0
  201. package/dist/migrate-layout.js.map +1 -0
  202. package/dist/openapi-tool.d.ts +2 -2
  203. package/dist/openapi-tool.d.ts.map +1 -1
  204. package/dist/openapi-tool.js.map +1 -1
  205. package/dist/openapi-types.d.ts +2 -1
  206. package/dist/openapi-types.d.ts.map +1 -1
  207. package/dist/openapi-types.js +240 -12
  208. package/dist/openapi-types.js.map +1 -1
  209. package/dist/pipeline-report.d.ts +3 -2
  210. package/dist/pipeline-report.d.ts.map +1 -1
  211. package/dist/pipeline-report.js +19 -16
  212. package/dist/pipeline-report.js.map +1 -1
  213. package/dist/port.d.ts +5 -4
  214. package/dist/port.d.ts.map +1 -1
  215. package/dist/port.js +46 -29
  216. package/dist/port.js.map +1 -1
  217. package/dist/project-facts.d.ts +28 -4
  218. package/dist/project-facts.d.ts.map +1 -1
  219. package/dist/project-facts.js +12 -2
  220. package/dist/project-facts.js.map +1 -1
  221. package/dist/recipes/4.0.0.d.ts +9 -0
  222. package/dist/recipes/4.0.0.d.ts.map +1 -0
  223. package/dist/recipes/4.0.0.js +34 -0
  224. package/dist/recipes/4.0.0.js.map +1 -0
  225. package/dist/recipes/index.d.ts.map +1 -1
  226. package/dist/recipes/index.js +2 -0
  227. package/dist/recipes/index.js.map +1 -1
  228. package/dist/release-verification.d.ts +11 -1
  229. package/dist/release-verification.d.ts.map +1 -1
  230. package/dist/release-verification.js +47 -4
  231. package/dist/release-verification.js.map +1 -1
  232. package/dist/review.d.ts +21 -0
  233. package/dist/review.d.ts.map +1 -0
  234. package/dist/review.js +823 -0
  235. package/dist/review.js.map +1 -0
  236. package/dist/route-types.d.ts +28 -0
  237. package/dist/route-types.d.ts.map +1 -0
  238. package/dist/route-types.js +106 -0
  239. package/dist/route-types.js.map +1 -0
  240. package/dist/rules/codes.d.ts +9 -0
  241. package/dist/rules/codes.d.ts.map +1 -1
  242. package/dist/rules/codes.js +9 -0
  243. package/dist/rules/codes.js.map +1 -1
  244. package/dist/rules/data-guard.d.ts +12 -0
  245. package/dist/rules/data-guard.d.ts.map +1 -0
  246. package/dist/rules/data-guard.js +213 -0
  247. package/dist/rules/data-guard.js.map +1 -0
  248. package/dist/rules/index.d.ts +3 -0
  249. package/dist/rules/index.d.ts.map +1 -1
  250. package/dist/rules/index.js +17 -5
  251. package/dist/rules/index.js.map +1 -1
  252. package/dist/rules/islands.d.ts.map +1 -1
  253. package/dist/rules/islands.js +7 -4
  254. package/dist/rules/islands.js.map +1 -1
  255. package/dist/rules/legacy.d.ts +3 -1
  256. package/dist/rules/legacy.d.ts.map +1 -1
  257. package/dist/rules/legacy.js +829 -34
  258. package/dist/rules/legacy.js.map +1 -1
  259. package/dist/rules/nano.d.ts.map +1 -1
  260. package/dist/rules/nano.js +15 -6
  261. package/dist/rules/nano.js.map +1 -1
  262. package/dist/rules/pages.d.ts +15 -0
  263. package/dist/rules/pages.d.ts.map +1 -0
  264. package/dist/rules/pages.js +88 -0
  265. package/dist/rules/pages.js.map +1 -0
  266. package/dist/rules/routes.d.ts +11 -0
  267. package/dist/rules/routes.d.ts.map +1 -1
  268. package/dist/rules/routes.js +180 -2
  269. package/dist/rules/routes.js.map +1 -1
  270. package/dist/rules/secrets.d.ts +10 -0
  271. package/dist/rules/secrets.d.ts.map +1 -0
  272. package/dist/rules/secrets.js +169 -0
  273. package/dist/rules/secrets.js.map +1 -0
  274. package/dist/rules/security.d.ts +7 -0
  275. package/dist/rules/security.d.ts.map +1 -1
  276. package/dist/rules/security.js +171 -65
  277. package/dist/rules/security.js.map +1 -1
  278. package/dist/rules/typescript.d.ts +16 -0
  279. package/dist/rules/typescript.d.ts.map +1 -0
  280. package/dist/rules/typescript.js +59 -0
  281. package/dist/rules/typescript.js.map +1 -0
  282. package/dist/rules/zones.d.ts +17 -0
  283. package/dist/rules/zones.d.ts.map +1 -0
  284. package/dist/rules/zones.js +174 -0
  285. package/dist/rules/zones.js.map +1 -0
  286. package/dist/scaffold.d.ts +25 -12
  287. package/dist/scaffold.d.ts.map +1 -1
  288. package/dist/scaffold.js +154 -90
  289. package/dist/scaffold.js.map +1 -1
  290. package/dist/sdk.d.ts +17 -3
  291. package/dist/sdk.d.ts.map +1 -1
  292. package/dist/sdk.js +941 -153
  293. package/dist/sdk.js.map +1 -1
  294. package/dist/search-terms.d.ts +2 -0
  295. package/dist/search-terms.d.ts.map +1 -1
  296. package/dist/search-terms.js +23 -8
  297. package/dist/search-terms.js.map +1 -1
  298. package/dist/smoke.d.ts +79 -0
  299. package/dist/smoke.d.ts.map +1 -0
  300. package/dist/smoke.js +494 -0
  301. package/dist/smoke.js.map +1 -0
  302. package/dist/sync-manifest.d.ts.map +1 -1
  303. package/dist/sync-manifest.js +2 -1
  304. package/dist/sync-manifest.js.map +1 -1
  305. package/dist/sync-routes.d.ts +4 -3
  306. package/dist/sync-routes.d.ts.map +1 -1
  307. package/dist/sync-routes.js +4 -3
  308. package/dist/sync-routes.js.map +1 -1
  309. package/dist/test-tool.d.ts.map +1 -1
  310. package/dist/test-tool.js +30 -11
  311. package/dist/test-tool.js.map +1 -1
  312. package/dist/types-search.d.ts.map +1 -1
  313. package/dist/types-search.js +11 -5
  314. package/dist/types-search.js.map +1 -1
  315. package/dist/upgrade.d.ts +36 -6
  316. package/dist/upgrade.d.ts.map +1 -1
  317. package/dist/upgrade.js +167 -29
  318. package/dist/upgrade.js.map +1 -1
  319. package/dist/verification-plan.d.ts.map +1 -1
  320. package/dist/verification-plan.js +8 -0
  321. package/dist/verification-plan.js.map +1 -1
  322. package/dist/verification.d.ts.map +1 -1
  323. package/dist/verification.js +45 -12
  324. package/dist/verification.js.map +1 -1
  325. package/dist/web-app-options.d.ts +19 -0
  326. package/dist/web-app-options.d.ts.map +1 -0
  327. package/dist/web-app-options.js +49 -0
  328. package/dist/web-app-options.js.map +1 -0
  329. package/dist/work-graph.d.ts +3 -0
  330. package/dist/work-graph.d.ts.map +1 -1
  331. package/dist/work-graph.js +33 -16
  332. package/dist/work-graph.js.map +1 -1
  333. package/docs/examples.json +185 -29
  334. package/docs/llms-full.txt +4123 -548
  335. package/docs/types.json +14391 -10060
  336. package/package.json +19 -11
  337. package/src/app-files.ts +40 -0
  338. package/src/assure-hydration.ts +139 -46
  339. package/src/assure.ts +17 -2
  340. package/src/capabilities-tool.ts +35 -9
  341. package/src/cdn-check.ts +268 -0
  342. package/src/check-diagnostics.ts +199 -797
  343. package/src/check-scan.ts +394 -63
  344. package/src/check.ts +146 -58
  345. package/src/cli.ts +347 -92
  346. package/src/command-catalog.ts +407 -45
  347. package/src/config-target.ts +47 -0
  348. package/src/contracts.ts +66 -15
  349. package/src/db-audit.ts +128 -0
  350. package/src/db-child.ts +285 -0
  351. package/src/db-config.ts +224 -0
  352. package/src/db-tool.ts +690 -0
  353. package/src/dev-bun-config.ts +116 -40
  354. package/src/dev-feed-tool.ts +912 -0
  355. package/src/dev-server-client.ts +267 -0
  356. package/src/diagnostics.ts +179 -0
  357. package/src/diff-tool.ts +6 -5
  358. package/src/docs-search.ts +10 -3
  359. package/src/doctor.ts +98 -15
  360. package/src/env-file.ts +78 -1
  361. package/src/fix-recipes.ts +44 -31
  362. package/src/frontend-guidance.ts +5 -5
  363. package/src/i18n-check.ts +179 -0
  364. package/src/init-agents.ts +301 -38
  365. package/src/internal/code-unit-order.ts +5 -0
  366. package/src/internal/script-kind.ts +11 -0
  367. package/src/internal/source-facts.ts +96 -22
  368. package/src/internal/typescript-import.ts +663 -68
  369. package/src/introspect.ts +93 -82
  370. package/src/learn.ts +3 -3
  371. package/src/levels-tool.ts +47 -2
  372. package/src/load.ts +144 -32
  373. package/src/manifest-tool.ts +3 -2
  374. package/src/mcp-app-tool.ts +2 -0
  375. package/src/mcp-context.ts +5 -7
  376. package/src/mcp-delegate.ts +162 -0
  377. package/src/mcp-docs-tools.ts +23 -5
  378. package/src/mcp-exec.ts +301 -161
  379. package/src/mcp-http.ts +22 -5
  380. package/src/mcp-io.ts +130 -0
  381. package/src/mcp-isolate.ts +287 -0
  382. package/src/mcp-path.ts +50 -0
  383. package/src/mcp-project-child.ts +182 -0
  384. package/src/mcp-reflect.ts +3 -2
  385. package/src/mcp-render.ts +72 -42
  386. package/src/mcp-root.ts +130 -24
  387. package/src/mcp-run.ts +190 -56
  388. package/src/mcp-ws.ts +4 -1
  389. package/src/mcp.ts +193 -91
  390. package/src/migrate-layout.ts +1121 -0
  391. package/src/openapi-tool.ts +7 -3
  392. package/src/openapi-types.ts +315 -13
  393. package/src/pipeline-report.ts +22 -18
  394. package/src/port.ts +53 -30
  395. package/src/project-facts.ts +42 -8
  396. package/src/recipes/4.0.0.ts +35 -0
  397. package/src/recipes/index.ts +2 -0
  398. package/src/release-verification.ts +74 -5
  399. package/src/review.ts +988 -0
  400. package/src/route-types.ts +133 -0
  401. package/src/rules/codes.ts +9 -0
  402. package/src/rules/data-guard.ts +230 -0
  403. package/src/rules/index.ts +18 -5
  404. package/src/rules/islands.ts +12 -4
  405. package/src/rules/legacy.ts +947 -35
  406. package/src/rules/nano.ts +18 -6
  407. package/src/rules/pages.ts +99 -0
  408. package/src/rules/routes.ts +181 -2
  409. package/src/rules/secrets.ts +174 -0
  410. package/src/rules/security.ts +198 -70
  411. package/src/rules/typescript.ts +77 -0
  412. package/src/rules/zones.ts +195 -0
  413. package/src/scaffold.ts +175 -98
  414. package/src/sdk.ts +1215 -158
  415. package/src/search-terms.ts +24 -7
  416. package/src/smoke.ts +607 -0
  417. package/src/sync-manifest.ts +2 -1
  418. package/src/sync-routes.ts +4 -3
  419. package/src/test-tool.ts +32 -11
  420. package/src/types-search.ts +11 -4
  421. package/src/upgrade.ts +205 -25
  422. package/src/verification-plan.ts +27 -0
  423. package/src/verification.ts +50 -12
  424. package/src/web-app-options.ts +57 -0
  425. package/src/work-graph.ts +40 -16
@@ -1,25 +1,37 @@
1
1
  /**
2
- * `nifra init-agents` - retrofit an EXISTING app with the agent-discovery files a freshly scaffolded
3
- * app ships, so an already-built project adopts the nifra MCP in one command:
2
+ * `nifra init-agents` - retrofit an EXISTING app with the agent files a freshly scaffolded app ships, so
3
+ * an already-built project adopts them in one command:
4
4
  *
5
- * .mcp.json - Claude Code's project MCP registry (launches `bunx @nifrajs/cli mcp`)
6
- * .cursor/mcp.json - Cursor's MCP registry (same server config)
7
- * CLAUDE.md - Claude's MCP-first preamble + `@AGENTS.md` import
8
- * AGENTS.md - a `## MCP server` section appended (or a minimal file if none exists)
5
+ * .mcp.json, .cursor/mcp.json - the nifra MCP server for Claude Code and Cursor
6
+ * CLAUDE.md, GEMINI.md, .cursor/rules/nifra.mdc, .github/copilot-instructions.md
7
+ * - each agent's pointer to AGENTS.md, the single source of guidance
8
+ * AGENTS.md - the `## MCP server` section, and for an app with `routes/` the
9
+ * `## Project structure` section, appended when missing (or a minimal
10
+ * file if none exists)
9
11
  *
10
12
  * The generators are imported from `create-nifra/agent-files` - the SAME source of truth `create-nifra`
11
13
  * uses at scaffold time - so a retrofitted app and a freshly scaffolded one get byte-identical configs.
12
14
  *
13
15
  * Safety: this writes into the user's existing tree, so it NEVER silently clobbers a file they may have
14
16
  * customized. By default an existing `.mcp.json` / `CLAUDE.md` / `.cursor/mcp.json` is SKIPPED with a
15
- * notice; `--force` overwrites. `AGENTS.md` is special-cased - if it already has the MCP section it's
16
- * left alone, otherwise the section is APPENDED (never overwriting the user's conventions), and `--force`
17
- * is not needed for that append since it's additive. Every write path is resolved + confined under the
17
+ * notice; `--force` overwrites. `AGENTS.md` is special-cased - a section it already has is left alone,
18
+ * a missing one is APPENDED (never overwriting the user's conventions), and `--force` is not needed for
19
+ * that append since it's additive. Every write path is resolved + confined under the
18
20
  * cwd (no `..` traversal escaping the project root).
21
+ *
22
+ * `--sync-mcp` is the upgrade path: the launch command pins an exact `@nifrajs/cli` version, so after
23
+ * the app upgrades nifra every existing file still launches the old CLI. It rewrites that version and
24
+ * nothing else - the pin in both MCP registries and the launch command in CLAUDE.md and AGENTS.md's
25
+ * MCP section - to the nifra the project installs, leaving every other byte of every file as it was.
26
+ *
27
+ * At a workspace root that is not itself a nifra project but has exactly one nifra member, both runs
28
+ * also name that member in the registries' launch args (`mcp app`), so the server keeps its root when
29
+ * a second nifra member arrives.
19
30
  */
20
- import { lstat, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
21
- import { isAbsolute, relative, resolve } from "node:path";
22
- import { AGENTS_MD_PATH, agentsMcpSection, CLAUDE_MD_PATH, CURSOR_MCP_JSON_PATH, claudeMd, MCP_JSON_PATH, mcpJson, } from "create-nifra/agent-files";
31
+ import { chmod, lstat, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
32
+ import { isAbsolute, relative, resolve, sep } from "node:path";
33
+ import { AGENT_POINTERS, AGENTS_MD_PATH, agentsMcpSection, agentsStructureSection, CLAUDE_MD_PATH, CURSOR_MCP_JSON_PATH, MCP_CLI_VERSION, MCP_JSON_PATH, MCP_SERVER_COMMAND, mcpJson, STRUCTURE_HEADING, } from "create-nifra/agent-files";
34
+ import { installedNifraVersion, resolveRootState } from "./mcp-root.js";
23
35
  /** Confine a project-relative path under `cwd` and return the absolute path. Rejects a spec that escapes
24
36
  * the root (defense-in-depth - these specs are constants, but the cwd-confinement invariant is enforced
25
37
  * at the seam, not assumed). Exported so the invariant is directly testable. */
@@ -83,18 +95,20 @@ async function writeOwned(cwd, rel, content, force) {
83
95
  if (!force && (await fileExists(abs))) {
84
96
  return { path: rel, action: "skipped", note: "exists - pass --force to overwrite" };
85
97
  }
86
- // `.cursor/mcp.json` needs its parent dir; `recursive` is a no-op for the root-level files.
98
+ // A nested file (`.cursor/`, `.github/`) needs its parent dir; `recursive` is a no-op at the root.
87
99
  await mkdir(resolve(abs, ".."), { recursive: true });
88
100
  await atomicWrite(abs, content);
89
101
  return { path: rel, action: "wrote" };
90
102
  }
91
103
  /** Write via a sibling temp file so a crash mid-write can't leave a half-written config in place.
92
104
  * `wx` fails rather than following an existing name, and the temp is cleaned up on any failure so a
93
- * botched run doesn't litter the user's project. */
94
- async function atomicWrite(abs, content) {
105
+ * botched run doesn't litter the user's project. `mode` carries a replaced file's permissions over. */
106
+ async function atomicWrite(abs, content, mode) {
95
107
  const tmp = `${abs}.nifra-${process.pid}-${Date.now()}`;
96
108
  await writeFile(tmp, content, { flag: "wx" });
97
109
  try {
110
+ if (mode !== undefined)
111
+ await chmod(tmp, mode);
98
112
  await rename(tmp, abs);
99
113
  }
100
114
  catch (error) {
@@ -103,16 +117,19 @@ async function atomicWrite(abs, content) {
103
117
  }
104
118
  }
105
119
  /**
106
- * AGENTS.md is additive, not owned: if it exists and already has the MCP section, leave it; if it exists
107
- * without the section, append the section (preserving the user's conventions); if it's absent, write a
108
- * minimal AGENTS.md that is just the MCP section under a heading. `--force` is irrelevant here - we never
109
- * overwrite the user's existing guidance.
120
+ * AGENTS.md is additive, not owned: each section it lacks is appended (preserving the user's
121
+ * conventions), each it has is left alone, and an absent file is written with just those sections.
122
+ * `--force` is irrelevant here - we never overwrite the user's existing guidance. The structure section
123
+ * is for an app with `routes/`; an API-only app has no frontend to keep apart.
110
124
  */
111
125
  async function ensureAgentsMd(cwd) {
112
126
  const abs = safeJoin(cwd, AGENTS_MD_PATH);
113
127
  await assertSafeParents(cwd, abs);
114
128
  await assertRegularTarget(abs, AGENTS_MD_PATH);
115
- const section = agentsMcpSection();
129
+ const sections = [{ heading: "## MCP server", text: agentsMcpSection() }];
130
+ if (await isDirectory(safeJoin(cwd, "routes"))) {
131
+ sections.push({ heading: STRUCTURE_HEADING, text: agentsStructureSection() });
132
+ }
116
133
  let existing;
117
134
  try {
118
135
  existing = await readFile(abs, "utf8");
@@ -121,36 +138,215 @@ async function ensureAgentsMd(cwd) {
121
138
  existing = undefined; // no AGENTS.md yet
122
139
  }
123
140
  if (existing === undefined) {
124
- await atomicWrite(abs, `# AGENTS.md\n\nGuidance for AI coding agents working in this repo.\n\n${section}\n`);
141
+ const body = sections.map((section) => section.text).join("\n\n");
142
+ await atomicWrite(abs, `# AGENTS.md\n\nGuidance for AI coding agents working in this repo.\n\n${body}\n`);
125
143
  return { path: AGENTS_MD_PATH, action: "wrote" };
126
144
  }
127
145
  // Match on the section heading, not the full body, so a reformatted-but-present section still counts.
128
- if (existing.includes("## MCP server")) {
129
- return { path: AGENTS_MD_PATH, action: "present", note: "already has an MCP section" };
146
+ const current = existing;
147
+ const missing = sections.filter((section) => !current.includes(section.heading));
148
+ if (missing.length === 0) {
149
+ return { path: AGENTS_MD_PATH, action: "present", note: "already has every section" };
130
150
  }
131
- const sep = existing.endsWith("\n") ? "\n" : "\n\n";
132
- await atomicWrite(abs, `${existing}${sep}${section}\n`);
133
- return { path: AGENTS_MD_PATH, action: "appended" };
151
+ const sep = current.endsWith("\n") ? "\n" : "\n\n";
152
+ await atomicWrite(abs, `${current}${sep}${missing.map((section) => section.text).join("\n\n")}\n`);
153
+ const names = missing.map((section) => section.heading.slice(3)).join(" + ");
154
+ return { path: AGENTS_MD_PATH, action: "appended", note: names };
155
+ }
156
+ const isDirectory = (path) => lstat(path)
157
+ .then((stat) => stat.isDirectory())
158
+ .catch(() => false);
159
+ /** An exact version: the only pin --sync-mcp rewrites. A dist-tag or a range is a deliberate choice,
160
+ * not a scaffold-time freeze. Prerelease and build suffixes are part of the version. */
161
+ const PIN_VERSION = String.raw `\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?`;
162
+ /** The pin as both MCP registries hold it: one JSON string in the server's `args`. */
163
+ const JSON_PIN = new RegExp(`"@nifrajs/cli@(${PIN_VERSION})"`, "g");
164
+ /** The pin as the markdown quotes it: the whole launch command, so prose that merely mentions a
165
+ * version (an upgrade note, a changelog line) is never touched. */
166
+ const LAUNCH_PIN = new RegExp(`${MCP_SERVER_COMMAND} @nifrajs/cli@(${PIN_VERSION}) mcp`, "g");
167
+ /** The one nifra workspace member `cwd` resolves to, as a POSIX path relative to it, when `cwd` is a
168
+ * workspace root and not itself a nifra project. */
169
+ async function workspaceMember(cwd) {
170
+ const state = await resolveRootState(cwd, false);
171
+ return state.source === "workspace" ? relative(cwd, state.root).split(sep).join("/") : undefined;
172
+ }
173
+ /** The registries' launch args when they name no directory: `["@nifrajs/cli@x.y.z", "mcp"]`. Group 2
174
+ * is the whitespace between the two, reused before the member so the file keeps its own layout. */
175
+ const JSON_BARE_LAUNCH = new RegExp(`("@nifrajs/cli@${PIN_VERSION}"\\s*,(\\s*)"mcp")(\\s*\\])`, "g");
176
+ /** Add `member` after a bare `"mcp"` launch arg; a launch that already names a directory is left alone. */
177
+ function nameMember(text, member) {
178
+ let named = false;
179
+ const rewritten = text.replace(JSON_BARE_LAUNCH, (_match, launch, gap, close) => {
180
+ named = true;
181
+ return `${launch},${gap}${JSON.stringify(member)}${close}`;
182
+ });
183
+ return { text: rewritten, named };
184
+ }
185
+ function repin(text, pattern, target) {
186
+ let pins = 0;
187
+ const stale = [];
188
+ const rewritten = text.replace(pattern, (match, version) => {
189
+ pins++;
190
+ if (version === target)
191
+ return match;
192
+ if (!stale.includes(version))
193
+ stale.push(version);
194
+ return match.replace(`@${version}`, () => `@${target}`);
195
+ });
196
+ return { text: rewritten, pins, stale };
197
+ }
198
+ /** AGENTS.md is the user's file: only its `## MCP server` section - the heading up to the next `#` or
199
+ * `##` heading, or the end of the file - is ours to re-pin. */
200
+ function repinMcpSection(text, target) {
201
+ const heading = /^## MCP server\b.*$/m.exec(text);
202
+ if (heading === null)
203
+ return { text, pins: 0, stale: [] };
204
+ const start = heading.index + heading[0].length;
205
+ const next = /^#{1,2}[ \t]/m.exec(text.slice(start));
206
+ const end = next === null ? text.length : start + next.index;
207
+ const section = repin(text.slice(start, end), LAUNCH_PIN, target);
208
+ return { ...section, text: text.slice(0, start) + section.text + text.slice(end) };
209
+ }
210
+ /** An MCP registry: its pin, and at a workspace root the member its launch names. Only the registries
211
+ * launch the server, so the markdown launch commands keep their wording. */
212
+ function repinRegistry(text, target, member) {
213
+ const scan = repin(text, JSON_PIN, target);
214
+ if (member === undefined || scan.pins === 0)
215
+ return scan;
216
+ const { text: rewritten, named } = nameMember(scan.text, member);
217
+ return named ? { ...scan, text: rewritten, named: member } : scan;
218
+ }
219
+ /** Every file that carries the pin, and the part of it --sync-mcp may rewrite. */
220
+ const PIN_SITES = [
221
+ { path: MCP_JSON_PATH, repin: repinRegistry },
222
+ { path: CURSOR_MCP_JSON_PATH, repin: repinRegistry },
223
+ { path: CLAUDE_MD_PATH, repin: (text, target) => repin(text, LAUNCH_PIN, target) },
224
+ { path: AGENTS_MD_PATH, repin: repinMcpSection },
225
+ ];
226
+ /** Where one file's pin stands against `target`. Never throws on a file it would not write: a
227
+ * symlinked CLAUDE.md (a common alias for AGENTS.md) is reported and left alone, not a hard stop. */
228
+ async function readPin(cwd, site, target, member) {
229
+ const abs = safeJoin(cwd, site.path);
230
+ try {
231
+ await assertSafeParents(cwd, abs);
232
+ }
233
+ catch (error) {
234
+ return {
235
+ kind: "skip",
236
+ note: `left alone - ${error.message.replace(/^\[nifra\] /, "")}`,
237
+ };
238
+ }
239
+ const stat = await lstatOrMissing(abs);
240
+ if (stat === undefined)
241
+ return { kind: "skip", note: "absent - `nifra init-agents` creates it" };
242
+ if (stat.isSymbolicLink() || !stat.isFile())
243
+ return { kind: "skip", note: "not a regular file - left alone" };
244
+ // latin1 is one char per byte, so writing it back reproduces every byte outside a pin exactly,
245
+ // whatever the file's encoding; the pin patterns are ASCII, so they match as they would in UTF-8.
246
+ const scan = site.repin(await readFile(abs, "latin1"), target, member);
247
+ if (scan.pins === 0)
248
+ return { kind: "skip", note: "no pinned @nifrajs/cli launch command" };
249
+ if (scan.stale.length === 0 && scan.named === undefined)
250
+ return { kind: "current" };
251
+ return { kind: "stale", abs, mode: stat.mode & 0o777, scan };
134
252
  }
135
253
  /**
136
- * Retrofit `cwd` with the four agent-discovery files. Pure enough to unit-test (no argv, no process.exit,
254
+ * The version --sync-mcp pins to: the nifra the project installs, so the server an agent launches
255
+ * describes the surface the code builds with. The running CLI's own version when nothing is
256
+ * installed. Not simply the running CLI's version: the command that fixes a drifted server is run
257
+ * by that drifted CLI, and it must not re-pin to itself.
258
+ */
259
+ export async function mcpPinTarget(cwd) {
260
+ const installed = await installedNifraVersion(cwd);
261
+ if (installed !== undefined)
262
+ return installed.version;
263
+ // A workspace with isolated installs keeps nifra in the member's own node_modules.
264
+ const member = await workspaceMember(cwd);
265
+ const memberInstalled = member === undefined ? undefined : await installedNifraVersion(resolve(cwd, member));
266
+ return memberInstalled?.version ?? MCP_CLI_VERSION;
267
+ }
268
+ /** Read-only: every agent file whose pinned `@nifrajs/cli` is not the one the project installs. */
269
+ export async function collectStaleMcpPins(cwd) {
270
+ const target = await mcpPinTarget(cwd);
271
+ const files = [];
272
+ for (const site of PIN_SITES) {
273
+ const state = await readPin(cwd, site, target);
274
+ if (state.kind === "stale")
275
+ files.push({ path: site.path, pinned: state.scan.stale });
276
+ }
277
+ return { target, files };
278
+ }
279
+ /** --sync-mcp: rewrite each stale pin to the project's version and touch nothing else. Creates no
280
+ * file and appends no section - a file without a pin is reported, not repaired. */
281
+ async function syncMcpPins(cwd) {
282
+ const target = await mcpPinTarget(cwd);
283
+ const member = await workspaceMember(cwd);
284
+ const files = [];
285
+ for (const site of PIN_SITES) {
286
+ const state = await readPin(cwd, site, target, member);
287
+ if (state.kind === "skip") {
288
+ files.push({ path: site.path, action: "skipped", note: state.note });
289
+ }
290
+ else if (state.kind === "current") {
291
+ files.push({ path: site.path, action: "present", note: `already pinned to ${target}` });
292
+ }
293
+ else {
294
+ await atomicWrite(state.abs, Buffer.from(state.scan.text, "latin1"), state.mode);
295
+ const notes = [
296
+ ...(state.scan.stale.length > 0 ? [`${state.scan.stale.join(", ")} -> ${target}`] : []),
297
+ ...(state.scan.named !== undefined ? [`launches \`mcp ${state.scan.named}\``] : []),
298
+ ];
299
+ files.push({ path: site.path, action: "synced", note: notes.join("; ") });
300
+ }
301
+ }
302
+ return { cwd, files, syncedTo: target };
303
+ }
304
+ /**
305
+ * Retrofit `cwd` with the agent files. Pure enough to unit-test (no argv, no process.exit,
137
306
  * no console) - the CLI wrapper handles printing + the exit code.
138
307
  */
139
308
  export async function initAgents(cwd, opts = {}) {
140
309
  const force = opts.force ?? false;
141
- // Order: the two MCP registries + CLAUDE.md (owned, no-clobber), then AGENTS.md (additive).
310
+ if (opts.syncMcp === true) {
311
+ // --force rewrites whole files; --sync-mcp exists to promise it will not. Combined, one of the
312
+ // two promises breaks, so refuse rather than pick.
313
+ if (force)
314
+ throw new Error("[nifra] --sync-mcp cannot be combined with --force");
315
+ return syncMcpPins(cwd);
316
+ }
317
+ // Order: the two MCP registries and each agent's pointer (owned, no-clobber), then AGENTS.md (additive).
318
+ const member = await workspaceMember(cwd);
319
+ const registry = member === undefined ? mcpJson() : nameMember(mcpJson(), member).text;
142
320
  const files = [];
143
- files.push(await writeOwned(cwd, MCP_JSON_PATH, mcpJson(), force));
144
- files.push(await writeOwned(cwd, CURSOR_MCP_JSON_PATH, mcpJson(), force));
145
- files.push(await writeOwned(cwd, CLAUDE_MD_PATH, claudeMd(), force));
321
+ files.push(await writeOwned(cwd, MCP_JSON_PATH, registry, force));
322
+ files.push(await writeOwned(cwd, CURSOR_MCP_JSON_PATH, registry, force));
323
+ for (const pointer of AGENT_POINTERS) {
324
+ files.push(await writeOwned(cwd, pointer.path, pointer.content(), force));
325
+ }
146
326
  files.push(await ensureAgentsMd(cwd));
147
- return { cwd, files };
327
+ // A file the run left alone may still launch an old CLI. Say so where the file is reported, with
328
+ // the command that fixes only that. Advisory: a file it cannot read costs the hint, not the run.
329
+ const { target, files: stale } = await collectStaleMcpPins(cwd).catch(() => ({
330
+ target: "",
331
+ files: [],
332
+ }));
333
+ return {
334
+ cwd,
335
+ files: files.map((file) => {
336
+ const pin = stale.find((entry) => entry.path === file.path);
337
+ if (pin === undefined || (file.action !== "skipped" && file.action !== "present"))
338
+ return file;
339
+ const hint = `pinned to ${pin.pinned.join(", ")}; \`nifra init-agents --sync-mcp\` re-pins it to ${target}`;
340
+ return { ...file, note: file.note === undefined ? hint : `${file.note}; ${hint}` };
341
+ }),
342
+ };
148
343
  }
149
344
  const ACTION_GLYPH = {
150
345
  wrote: "✓ wrote",
151
- appended: "✓ appended MCP section to",
346
+ appended: "✓ appended to",
152
347
  skipped: "• skipped",
153
348
  present: "• kept",
349
+ synced: "✓ re-pinned",
154
350
  };
155
351
  /** Format the retrofit result for the terminal. */
156
352
  export function renderInitAgents(result) {
@@ -158,6 +354,12 @@ export function renderInitAgents(result) {
158
354
  const tail = f.note ? ` (${f.note})` : "";
159
355
  return ` ${ACTION_GLYPH[f.action]} ${f.path}${tail}`;
160
356
  });
357
+ if (result.syncedTo !== undefined) {
358
+ const footer = result.files.some((f) => f.action === "synced")
359
+ ? `\nThe nifra MCP launch now pins @nifrajs/cli@${result.syncedTo}. Restart your agent so it respawns the server.`
360
+ : `\nNothing to re-pin - no file pins a version other than @nifrajs/cli@${result.syncedTo}.`;
361
+ return `nifra init-agents --sync-mcp\n\n${lines.join("\n")}\n${footer}`;
362
+ }
161
363
  const wroteAny = result.files.some((f) => f.action === "wrote" || f.action === "appended");
162
364
  const footer = wroteAny
163
365
  ? "\nThe nifra MCP is now registered. Restart your agent so it picks up .mcp.json, then prefer nifra_docs / nifra_example and gate on nifra check."
@@ -170,7 +372,10 @@ export function renderInitAgents(result) {
170
372
  * emits the structured result for agents/CI.
171
373
  */
172
374
  export async function runInitAgents(cwd, opts = {}) {
173
- const result = await initAgents(cwd, { force: opts.force ?? false });
375
+ const result = await initAgents(cwd, {
376
+ force: opts.force ?? false,
377
+ syncMcp: opts.syncMcp ?? false,
378
+ });
174
379
  if (opts.json) {
175
380
  console.log(JSON.stringify(result, null, 2));
176
381
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init-agents.js","sourceRoot":"","sources":["../src/init-agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-agents.js","sourceRoot":"","sources":["../src/init-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Code-unit order, the same on every runtime and in every locale. A file a project commits (a lock, a
2
+ * generated SDK) sorts with this, so its bytes do not depend on the machine that wrote it. */
3
+ export declare function codeUnitOrder(a: string, b: string): number;
4
+ //# sourceMappingURL=code-unit-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-unit-order.d.ts","sourceRoot":"","sources":["../../src/internal/code-unit-order.ts"],"names":[],"mappings":"AAAA;8FAC8F;AAC9F,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,6 @@
1
+ /** Code-unit order, the same on every runtime and in every locale. A file a project commits (a lock, a
2
+ * generated SDK) sorts with this, so its bytes do not depend on the machine that wrote it. */
3
+ export function codeUnitOrder(a, b) {
4
+ return a < b ? -1 : a > b ? 1 : 0;
5
+ }
6
+ //# sourceMappingURL=code-unit-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-unit-order.js","sourceRoot":"","sources":["../../src/internal/code-unit-order.ts"],"names":[],"mappings":"AAAA;8FAC8F;AAC9F,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type * as TSApi from "typescript";
2
+ /**
3
+ * The parser mode for a source file, by its extension. A `.ts` file is not parsed as TSX: there
4
+ * `<T>(x: T) => x` and `<Type>value` read as JSX, and parser recovery loses what follows them.
5
+ */
6
+ export declare function scriptKindOf(ts: typeof TSApi, file: string): TSApi.ScriptKind;
7
+ //# sourceMappingURL=script-kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-kind.d.ts","sourceRoot":"","sources":["../../src/internal/script-kind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAI7E"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The parser mode for a source file, by its extension. A `.ts` file is not parsed as TSX: there
3
+ * `<T>(x: T) => x` and `<Type>value` read as JSX, and parser recovery loses what follows them.
4
+ */
5
+ export function scriptKindOf(ts, file) {
6
+ if (file.endsWith(".tsx"))
7
+ return ts.ScriptKind.TSX;
8
+ if (/\.[cm]?ts$/.test(file))
9
+ return ts.ScriptKind.TS;
10
+ return file.endsWith(".jsx") ? ts.ScriptKind.JSX : ts.ScriptKind.JS;
11
+ }
12
+ //# sourceMappingURL=script-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-kind.js","sourceRoot":"","sources":["../../src/internal/script-kind.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAgB,EAAE,IAAY;IACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAA;IACnD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;IACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;AACrE,CAAC"}
@@ -9,7 +9,12 @@ export interface SourceFacts {
9
9
  parse(file: string, content: string): TSApi.SourceFile | undefined;
10
10
  isValueImportAt(source: TSApi.SourceFile, position: number, specifier: string): boolean | undefined;
11
11
  isRouteRegistrationAt(source: TSApi.SourceFile, position: number, method: string, path: string): boolean | undefined;
12
+ /** A call to the free function `callee` whose argument at `pathIndex` is the literal `path`. */
13
+ isFunctionRouteCallAt(source: TSApi.SourceFile, position: number, callee: string, pathIndex: number, path: string): boolean | undefined;
12
14
  isResponseSyntaxAt(source: TSApi.SourceFile, position: number): boolean | undefined;
15
+ /** Whether the `import` keyword at `position` starts a runtime `import(specifier)` call (true) or a
16
+ * type-position `import("…")` such as `typeof import("x")` (false); undefined when neither. */
17
+ isDynamicImportAt(source: TSApi.SourceFile, position: number, specifier: string): boolean | undefined;
13
18
  }
14
19
  export declare function createSourceFacts(ts: TypeScriptApi): SourceFacts;
15
20
  //# sourceMappingURL=source-facts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-facts.d.ts","sourceRoot":"","sources":["../../src/internal/source-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,CAAA;IAClE,eAAe,CACb,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,GAAG,SAAS,CAAA;IACtB,qBAAqB,CACnB,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,GAAG,SAAS,CAAA;IACtB,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACpF;AAuCD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,GAAG,WAAW,CAuEhE"}
1
+ {"version":3,"file":"source-facts.d.ts","sourceRoot":"","sources":["../../src/internal/source-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,CAAA;IAClE,eAAe,CACb,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,GAAG,SAAS,CAAA;IACtB,qBAAqB,CACnB,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,GAAG,SAAS,CAAA;IACtB,gGAAgG;IAChG,qBAAqB,CACnB,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,GAAG,SAAS,CAAA;IACtB,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;IACnF;mGAC+F;IAC/F,iBAAiB,CACf,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,GAAG,SAAS,CAAA;CACvB;AAuCD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,GAAG,WAAW,CAiIhE"}
@@ -1,3 +1,4 @@
1
+ import { scriptKindOf } from "./script-kind.js";
1
2
  function nodeAt(ts, source, position) {
2
3
  let best = source;
3
4
  const visit = (node) => {
@@ -35,14 +36,34 @@ export function createSourceFacts(ts) {
35
36
  const cached = cache.get(file);
36
37
  if (cached?.content === content)
37
38
  return cached.source;
38
- const kind = /\.tsx?$/.test(file) ? ts.ScriptKind.TSX : ts.ScriptKind.JS;
39
- const source = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true, kind);
40
- const diagnostics = source.parseDiagnostics;
41
- const parsed = diagnostics !== undefined && diagnostics.length > 0 ? undefined : source;
39
+ const kind = scriptKindOf(ts, file);
40
+ let parsed;
41
+ try {
42
+ const source = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true, kind);
43
+ const diagnostics = source.parseDiagnostics;
44
+ parsed = diagnostics !== undefined && diagnostics.length > 0 ? undefined : source;
45
+ }
46
+ catch {
47
+ // TypeScript 7 parses only the files its session preloaded; a module reached by following an
48
+ // import may not be one. Callers fall back to the lexical rule for a file with no tree.
49
+ parsed = undefined;
50
+ }
42
51
  cache.set(file, { content, source: parsed });
43
52
  return parsed;
44
53
  };
45
54
  const isValueImportAt = (source, position, specifier) => {
55
+ const reexport = ancestorAt(ts, source, position, ts.isExportDeclaration);
56
+ if (reexport !== undefined) {
57
+ const from = reexport.moduleSpecifier;
58
+ if (from === undefined || !ts.isStringLiteral(from) || from.text !== specifier)
59
+ return undefined;
60
+ if (reexport.isTypeOnly)
61
+ return false;
62
+ const named = reexport.exportClause;
63
+ if (named !== undefined && ts.isNamedExports(named))
64
+ return named.elements.some((element) => !element.isTypeOnly);
65
+ return true; // `export *` and `export * as ns`
66
+ }
46
67
  const declaration = ancestorAt(ts, source, position, ts.isImportDeclaration);
47
68
  if (declaration === undefined || !ts.isStringLiteral(declaration.moduleSpecifier))
48
69
  return undefined;
@@ -66,6 +87,16 @@ export function createSourceFacts(ts) {
66
87
  const first = call.arguments[0];
67
88
  return (name === method && first !== undefined && ts.isStringLiteralLike(first) && first.text === path);
68
89
  };
90
+ const isFunctionRouteCallAt = (source, position, callee, pathIndex, path) => {
91
+ const call = ancestorAt(ts, source, position, ts.isCallExpression);
92
+ if (call === undefined || !ts.isIdentifier(call.expression))
93
+ return false;
94
+ const argument = call.arguments[pathIndex];
95
+ return (call.expression.text === callee &&
96
+ argument !== undefined &&
97
+ ts.isStringLiteralLike(argument) &&
98
+ argument.text === path);
99
+ };
69
100
  const isResponseSyntaxAt = (source, position) => {
70
101
  const returnStatement = ancestorAt(ts, source, position, ts.isReturnStatement);
71
102
  if (returnStatement !== undefined) {
@@ -77,6 +108,31 @@ export function createSourceFacts(ts) {
77
108
  return rawResponseExpression(ts, arrow.body);
78
109
  return false;
79
110
  };
80
- return { parse, isValueImportAt, isRouteRegistrationAt, isResponseSyntaxAt };
111
+ const isDynamicImportAt = (source, position, specifier) => {
112
+ let node = nodeAt(ts, source, Math.max(0, Math.min(position, source.end - 1)));
113
+ for (;;) {
114
+ if (ts.isImportTypeNode(node))
115
+ return false;
116
+ if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {
117
+ const argument = node.arguments[0];
118
+ if (argument === undefined ||
119
+ !(ts.isStringLiteral(argument) || ts.isNoSubstitutionTemplateLiteral(argument))) {
120
+ return undefined;
121
+ }
122
+ return argument.text === specifier ? true : undefined;
123
+ }
124
+ if (node === source)
125
+ return undefined;
126
+ node = node.parent;
127
+ }
128
+ };
129
+ return {
130
+ parse,
131
+ isValueImportAt,
132
+ isRouteRegistrationAt,
133
+ isFunctionRouteCallAt,
134
+ isResponseSyntaxAt,
135
+ isDynamicImportAt,
136
+ };
81
137
  }
82
138
  //# sourceMappingURL=source-facts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-facts.js","sourceRoot":"","sources":["../../src/internal/source-facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-facts.js","sourceRoot":"","sources":["../../src/internal/source-facts.ts"],"names":[],"mappings":"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"}