@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4

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 (694) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +216 -162
  3. package/api/build/_adapter.d.mts +66 -0
  4. package/api/build/_adapter.mjs +139 -4
  5. package/api/build/blocks/blocks.d.mts +92 -0
  6. package/api/build/blocks/blocks.mjs +528 -0
  7. package/api/build/blocks/blocks.test.mjs +238 -0
  8. package/api/build/blocks/blocks.weights.json +1 -0
  9. package/api/build/build.doc.mjs +4 -0
  10. package/api/build/build.mjs +25 -6
  11. package/api/build/build.type.mjs +1 -1
  12. package/api/build/help/help.mjs +1 -1
  13. package/api/build/kit/answer.d.mts +18 -0
  14. package/api/build/kit/answer.mjs +195 -0
  15. package/api/build/kit/answer.test.mjs +108 -0
  16. package/api/build/kit/kind.d.mts +25 -0
  17. package/api/build/kit/kind.mjs +170 -0
  18. package/api/build/kit/kit.d.mts +2 -4
  19. package/api/build/kit/kit.mjs +8 -406
  20. package/api/build/kit/rank.d.mts +3 -32
  21. package/api/build/kit/rank.mjs +25 -342
  22. package/api/build/kit/rank.test.mjs +2 -1
  23. package/api/build/kit/signals.d.mts +79 -0
  24. package/api/build/kit/signals.mjs +295 -0
  25. package/api/build/kit/start.d.mts +32 -0
  26. package/api/build/kit/start.mjs +163 -0
  27. package/api/build/kit/words.d.mts +72 -0
  28. package/api/build/kit/words.mjs +202 -0
  29. package/api/build/tree.d.mts +20 -0
  30. package/api/build/tree.mjs +53 -0
  31. package/api/build/tree.test.mjs +185 -0
  32. package/api/build/tree.weights.json +1 -0
  33. package/api/component/_adapter.d.mts +72 -1
  34. package/api/component/_adapter.mjs +251 -23
  35. package/api/component/component-replacement.test.mjs +1 -0
  36. package/api/component/component.doc.mjs +6 -1
  37. package/api/component/component.mjs +97 -16
  38. package/api/component/component.test.mjs +95 -0
  39. package/api/component/doc-links.test.mjs +386 -0
  40. package/api/component/integration-export-name.test.mjs +644 -0
  41. package/api/component/list/list.mjs +42 -4
  42. package/api/discover/_adapter.d.mts +131 -12
  43. package/api/discover/_adapter.mjs +520 -34
  44. package/api/discover/_adapter.test.mjs +641 -17
  45. package/api/discover/_catalog-view.d.mts +16 -5
  46. package/api/discover/_catalog-view.mjs +32 -8
  47. package/api/discover/detail/doc/doc.mjs +9 -1
  48. package/api/discover/discover.d.mts +11 -0
  49. package/api/discover/discover.doc.mjs +9 -7
  50. package/api/discover/discover.mjs +120 -19
  51. package/api/discover/discover.type.d.mts +20 -7
  52. package/api/discover/discover.type.mjs +17 -7
  53. package/api/discover/list/list.d.mts +4 -3
  54. package/api/discover/list/list.mjs +17 -10
  55. package/api/docs/_adapter.d.mts +76 -2
  56. package/api/docs/_adapter.mjs +630 -34
  57. package/api/docs/docs-homes.test.mjs +127 -0
  58. package/api/docs/docs.doc.mjs +5 -4
  59. package/api/docs/docs.mjs +2 -1
  60. package/api/docs/docs.test.mjs +39 -20
  61. package/api/docs/integration-tree.test.mjs +42 -20
  62. package/api/docs/integrationDocs.test.mjs +125 -1
  63. package/api/docs/list/list.mjs +12 -2
  64. package/api/docs/namespace-section.test.mjs +6 -6
  65. package/api/docs/reference-blocks.test.mjs +3 -5
  66. package/api/doctor/_adapter.d.mts +128 -0
  67. package/api/doctor/_adapter.mjs +253 -4
  68. package/api/doctor/doctor.d.mts +217 -0
  69. package/api/doctor/doctor.doc.mjs +3 -2
  70. package/api/doctor/doctor.mjs +691 -52
  71. package/api/doctor/doctor.test.mjs +267 -18
  72. package/api/doctor/release-checks.test.mjs +156 -0
  73. package/api/doctor/theme-checks.mjs +17 -4
  74. package/api/doctor/theme-checks.test.mjs +223 -7
  75. package/api/error.d.mts +10 -0
  76. package/api/error.mjs +25 -0
  77. package/api/gap-report/gap-report.d.mts +3 -0
  78. package/api/gap-report/gap-report.doc.mjs +11 -3
  79. package/api/gap-report/gap-report.mjs +219 -52
  80. package/api/gap-report/gap-report.test.mjs +233 -0
  81. package/api/gap-report/gap-report.type.d.mts +41 -0
  82. package/api/gap-report/gap-report.type.mjs +18 -0
  83. package/api/hook/_adapter.mjs +3 -11
  84. package/api/hook/hook.doc.mjs +4 -0
  85. package/api/hook/hook.mjs +1 -1
  86. package/api/hook/list/list.d.mts +1 -1
  87. package/api/index.d.mts +2 -0
  88. package/api/index.mjs +2 -0
  89. package/api/init/_adapter.d.mts +22 -0
  90. package/api/init/_adapter.mjs +59 -0
  91. package/api/init/init.d.mts +7 -5
  92. package/api/init/init.doc.mjs +45 -10
  93. package/api/init/init.mjs +28 -4
  94. package/api/init/init.test.mjs +18 -2
  95. package/api/init/init.type.d.mts +50 -5
  96. package/api/init/init.type.mjs +39 -5
  97. package/api/init/remove/remove.mjs +17 -4
  98. package/api/init/remove/remove.test.mjs +114 -2
  99. package/api/init/run/run.d.mts +1 -1
  100. package/api/init/run/run.mjs +86 -12
  101. package/api/init/user/user.d.mts +14 -0
  102. package/api/init/user/user.mjs +87 -0
  103. package/api/init/user/user.test.mjs +232 -0
  104. package/api/integration/_adapter.d.mts +53 -0
  105. package/api/integration/_adapter.mjs +132 -0
  106. package/api/integration/add-contribution.component-names.test.mjs +66 -0
  107. package/api/integration/add-contribution.mjs +8 -4
  108. package/api/integration/add-contribution.test.mjs +4 -2
  109. package/api/integration/authoring-checks.mjs +192 -14
  110. package/api/integration/authoring-checks.test.mjs +1028 -0
  111. package/api/integration/authoring-checks.type.d.mts +143 -0
  112. package/api/integration/authoring-checks.type.mjs +74 -2
  113. package/api/integration/check/check.d.mts +96 -0
  114. package/api/integration/check/check.mjs +357 -0
  115. package/api/integration/check/check.test.mjs +489 -0
  116. package/api/integration/integration-check.type.d.mts +118 -0
  117. package/api/integration/integration-check.type.mjs +84 -0
  118. package/api/integration/integrationCheck.doc.d.mts +10 -0
  119. package/api/integration/integrationCheck.doc.mjs +73 -0
  120. package/api/integration/integrationComponentConflicts.doc.mjs +45 -6
  121. package/api/integration/integrationDocConflicts.doc.mjs +22 -5
  122. package/api/integration/pack-check.mjs +486 -123
  123. package/api/integration/pack-check.test.mjs +817 -10
  124. package/api/integration/validate-integration-case-disk.test.mjs +111 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +73 -5
  126. package/api/integration/validate-integration-gaps.test.mjs +1975 -0
  127. package/api/integration/validate-integration.d.mts +23 -2
  128. package/api/integration/validate-integration.mjs +358 -45
  129. package/api/integration/validate-integration.test.mjs +88 -8
  130. package/api/integration/validate-integration.type.d.mts +105 -0
  131. package/api/integration/validate-integration.type.mjs +79 -1
  132. package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
  133. package/api/integration/validateIntegration.doc.mjs +19 -3
  134. package/api/search/ORDERING.md +28 -0
  135. package/api/search/_adapter.d.mts +91 -0
  136. package/api/search/_adapter.mjs +172 -0
  137. package/api/search/_adapter.test.mjs +173 -0
  138. package/api/search/_candidate-score.d.mts +40 -0
  139. package/api/search/_candidate-score.mjs +238 -0
  140. package/api/search/_cards.json +6098 -0
  141. package/api/search/_compound.d.mts +50 -0
  142. package/api/search/_compound.mjs +170 -0
  143. package/api/search/_doc-searcher.d.mts +4 -0
  144. package/api/search/_doc-searcher.mjs +23 -0
  145. package/api/search/_doc-searcher.test.mjs +36 -0
  146. package/api/search/_doc-searcher.weights.json +1 -0
  147. package/api/search/_doc-text.d.mts +30 -0
  148. package/api/search/_doc-text.mjs +87 -0
  149. package/api/search/_entries.d.mts +63 -0
  150. package/api/search/_entries.mjs +232 -0
  151. package/api/search/_entries.test.mjs +48 -0
  152. package/api/search/_features.d.mts +35 -0
  153. package/api/search/_features.mjs +155 -0
  154. package/api/search/_gather-components.d.mts +26 -0
  155. package/api/search/_gather-components.mjs +284 -0
  156. package/api/search/_gather-docs.d.mts +20 -0
  157. package/api/search/_gather-docs.mjs +254 -0
  158. package/api/search/_gather-hooks.d.mts +12 -0
  159. package/api/search/_gather-hooks.mjs +52 -0
  160. package/api/search/_gather-templates.d.mts +25 -0
  161. package/api/search/_gather-templates.mjs +107 -0
  162. package/api/search/_lexical.d.mts +135 -0
  163. package/api/search/_lexical.mjs +351 -0
  164. package/api/search/_main-searcher.d.mts +19 -0
  165. package/api/search/_main-searcher.mjs +115 -0
  166. package/api/search/_main-searcher.test.mjs +106 -0
  167. package/api/search/_main-searcher.weights.json +1 -0
  168. package/api/search/_module-doc.d.mts +32 -0
  169. package/api/search/_module-doc.mjs +78 -0
  170. package/api/search/_order.d.mts +32 -0
  171. package/api/search/_order.mjs +162 -0
  172. package/api/search/_order.test.mjs +72 -0
  173. package/api/search/_priority.d.mts +50 -0
  174. package/api/search/_priority.mjs +139 -0
  175. package/api/search/_query-words.d.mts +25 -0
  176. package/api/search/_query-words.mjs +92 -0
  177. package/api/search/_query.d.mts +65 -0
  178. package/api/search/_query.mjs +176 -0
  179. package/api/search/_result.d.mts +97 -0
  180. package/api/search/_result.mjs +150 -0
  181. package/api/search/_score.d.mts +60 -0
  182. package/api/search/_score.mjs +283 -0
  183. package/api/search/_synonyms.d.mts +21 -0
  184. package/api/search/_synonyms.mjs +67 -0
  185. package/api/search/_template-searcher.d.mts +4 -0
  186. package/api/search/_template-searcher.mjs +23 -0
  187. package/api/search/_template-searcher.test.mjs +40 -0
  188. package/api/search/_template-searcher.weights.json +1 -0
  189. package/api/search/_titles.d.mts +33 -0
  190. package/api/search/_titles.mjs +65 -0
  191. package/api/search/_words.d.mts +64 -0
  192. package/api/search/_words.mjs +157 -0
  193. package/api/search/search.d.mts +22 -236
  194. package/api/search/search.doc.mjs +14 -7
  195. package/api/search/search.domain-priority.test.mjs +108 -18
  196. package/api/search/search.integration-check.test.mjs +24 -0
  197. package/api/search/search.mjs +59 -1904
  198. package/api/search/search.test.mjs +193 -15
  199. package/api/search/search.type.d.mts +20 -2
  200. package/api/search/search.type.mjs +12 -2
  201. package/api/search/tree.d.mts +15 -0
  202. package/api/search/tree.mjs +40 -0
  203. package/api/search/tree.test.mjs +66 -0
  204. package/api/search/tree.weights.json +1 -0
  205. package/api/swizzle/_adapter.mjs +2 -2
  206. package/api/swizzle/copy/copy.mjs +29 -15
  207. package/api/template/template-integration.test.mjs +1 -1
  208. package/api/template/template.mjs +5 -1
  209. package/api/template/template.test.mjs +120 -3
  210. package/api/theme/_adapter.d.mts +16 -0
  211. package/api/theme/_adapter.mjs +32 -5
  212. package/api/theme/build/build.d.mts +2 -1
  213. package/api/theme/build/build.family.test.mjs +64 -0
  214. package/api/theme/build/build.mjs +250 -38
  215. package/api/theme/build/build.packed-old-core.test.mjs +21 -3
  216. package/api/theme/build/font-warning.mjs +5 -3
  217. package/api/theme/build/font-warning.test.mjs +2 -1
  218. package/api/theme/remove/remove.test.mjs +2 -2
  219. package/api/theme/targets/targets.mjs +3 -10
  220. package/api/theme/themeBuild.doc.mjs +4 -4
  221. package/api/theme/themeTargets.doc.mjs +4 -0
  222. package/api/theme/use/use.test.mjs +1 -1
  223. package/api/upgrade/_adapter.d.mts +97 -11
  224. package/api/upgrade/_adapter.mjs +315 -32
  225. package/api/upgrade/registry/registry.d.mts +10 -4
  226. package/api/upgrade/registry/registry.mjs +33 -16
  227. package/api/upgrade/registry/registry.test.mjs +85 -0
  228. package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
  229. package/api/upgrade/run/run.d.mts +4 -2
  230. package/api/upgrade/run/run.mjs +48 -4
  231. package/api/upgrade/run/run.test.mjs +417 -3
  232. package/api/upgrade/status/status.d.mts +21 -5
  233. package/api/upgrade/status/status.mjs +45 -8
  234. package/api/upgrade/upgrade.doc.mjs +16 -8
  235. package/api/upgrade/upgrade.mjs +18 -3
  236. package/api/upgrade/upgrade.test.mjs +194 -0
  237. package/api/upgrade/upgrade.type.d.mts +28 -3
  238. package/api/upgrade/upgrade.type.mjs +24 -7
  239. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  240. package/assets/codemods/registry.mjs +1 -0
  241. package/assets/codemods/runner.mjs +7 -1
  242. package/assets/codemods/transforms/v0.7.0/__tests__/validate-data-token-ownership.test.mjs +11 -0
  243. package/assets/codemods/transforms/v0.7.0/validate-data-token-ownership.mjs +3 -3
  244. package/assets/codemods/transforms/v0.7.2/__tests__/migrate-list-edge-compensation-to-edge.test.mjs +120 -0
  245. package/assets/codemods/transforms/v0.7.2/index.mjs +20 -0
  246. package/assets/codemods/transforms/v0.7.2/migrate-list-edge-compensation-to-edge.mjs +198 -0
  247. package/assets/discover/official-packages.json +367 -0
  248. package/assets/docs/README.md +10 -0
  249. package/assets/docs/author-a-theme.doc.mjs +5 -5
  250. package/assets/docs/browser-support.doc.mjs +1 -1
  251. package/assets/docs/getting-started.doc.mjs +26 -6
  252. package/assets/docs/is-my-code-good.doc.mjs +287 -0
  253. package/assets/docs/styling-overview.doc.mjs +1 -1
  254. package/assets/docs/theme.doc.dense.mjs +1 -1
  255. package/assets/docs/theme.doc.mjs +2 -2
  256. package/assets/docs/theme.doc.zh.mjs +1 -1
  257. package/assets/docs/tree/add-a-component.doc.mjs +22 -2
  258. package/assets/docs/tree/add-a-theme.doc.mjs +14 -4
  259. package/assets/docs/tree/add-a-topic.doc.mjs +54 -9
  260. package/assets/docs/tree/agent-guidance.doc.mjs +19 -5
  261. package/assets/docs/tree/api.doc.mjs +6 -0
  262. package/assets/docs/tree/authoring.doc.mjs +61 -0
  263. package/assets/docs/tree/block-template.doc.mjs +8 -20
  264. package/assets/docs/tree/build-the-template.doc.mjs +1 -1
  265. package/assets/docs/tree/building-blocks.doc.mjs +6 -2
  266. package/assets/docs/tree/check-the-props.doc.mjs +201 -0
  267. package/assets/docs/tree/check-your-docs.doc.mjs +69 -11
  268. package/assets/docs/tree/checks.doc.mjs +32 -24
  269. package/assets/docs/tree/ci-and-containers.doc.mjs +101 -0
  270. package/assets/docs/tree/cli-command.doc.mjs +142 -0
  271. package/assets/docs/tree/cli.doc.mjs +7 -1
  272. package/assets/docs/tree/codemods.doc.mjs +17 -7
  273. package/assets/docs/tree/commands.doc.mjs +7 -1
  274. package/assets/docs/tree/component-family.doc.mjs +8 -6
  275. package/assets/docs/tree/component-imports.doc.mjs +21 -3
  276. package/assets/docs/tree/components.doc.mjs +7 -1
  277. package/assets/docs/tree/computer-agent-guide.doc.mjs +160 -0
  278. package/assets/docs/tree/computer-integrations.doc.mjs +93 -0
  279. package/assets/docs/tree/configuration.doc.mjs +8 -4
  280. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
  281. package/assets/docs/tree/define-the-theme.doc.mjs +7 -6
  282. package/assets/docs/tree/describe-the-component.doc.mjs +3 -3
  283. package/assets/docs/tree/docs.doc.mjs +9 -3
  284. package/assets/docs/tree/document-the-template.doc.mjs +1 -1
  285. package/assets/docs/tree/document-the-theme.doc.mjs +4 -4
  286. package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
  287. package/assets/docs/tree/extend-or-replace.doc.mjs +19 -9
  288. package/assets/docs/{authoring.doc.mjs → tree/field-reference.doc.mjs} +4 -3
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +3 -3
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +8 -6
  291. package/assets/docs/tree/global-integrations.doc.mjs +124 -0
  292. package/assets/docs/tree/global.doc.mjs +131 -0
  293. package/assets/docs/tree/grade-template-with-agent.doc.mjs +5 -5
  294. package/assets/docs/tree/help.doc.mjs +2 -2
  295. package/assets/docs/tree/host-entry.doc.mjs +128 -0
  296. package/assets/docs/tree/install-once.doc.mjs +105 -0
  297. package/assets/docs/tree/layout-spacing.doc.mjs +2 -3
  298. package/assets/docs/tree/layout.doc.mjs +6 -6
  299. package/assets/docs/tree/links.doc.mjs +7 -6
  300. package/assets/docs/tree/migration-setup.doc.mjs +3 -2
  301. package/assets/docs/tree/migration-verification.doc.mjs +0 -1
  302. package/assets/docs/tree/migration.doc.mjs +0 -1
  303. package/assets/docs/tree/monorepos.doc.mjs +84 -0
  304. package/assets/docs/tree/package-and-test.doc.mjs +1 -1
  305. package/assets/docs/tree/page-template.doc.mjs +4 -8
  306. package/assets/docs/tree/problems.doc.mjs +205 -0
  307. package/assets/docs/tree/project-global-or-both.doc.mjs +131 -0
  308. package/assets/docs/tree/publishing.doc.mjs +6 -6
  309. package/assets/docs/tree/quick-start.doc.mjs +54 -28
  310. package/assets/docs/tree/reference.doc.mjs +192 -0
  311. package/assets/docs/tree/replace-a-core-component.doc.mjs +15 -7
  312. package/assets/docs/tree/replace-a-core-template.doc.mjs +10 -12
  313. package/assets/docs/tree/scaffold.doc.mjs +1 -1
  314. package/assets/docs/tree/sections-and-placement.doc.mjs +9 -11
  315. package/assets/docs/tree/see-it-in-an-app.doc.mjs +17 -5
  316. package/assets/docs/tree/ship.doc.mjs +2 -2
  317. package/assets/docs/tree/short-and-findable.doc.mjs +9 -8
  318. package/assets/docs/tree/single-component.doc.mjs +15 -6
  319. package/assets/docs/tree/start-a-template.doc.mjs +18 -8
  320. package/assets/docs/tree/subcomponent.doc.mjs +6 -6
  321. package/assets/docs/tree/template-assets.doc.mjs +2 -2
  322. package/assets/docs/tree/template-doc-overview.doc.mjs +6 -17
  323. package/assets/docs/tree/template-fonts.doc.mjs +1 -1
  324. package/assets/docs/tree/template-grading-rubric.doc.mjs +17 -38
  325. package/assets/docs/tree/template-icons.doc.mjs +1 -1
  326. package/assets/docs/tree/template-images-media.doc.mjs +1 -1
  327. package/assets/docs/tree/template-styles.doc.mjs +2 -2
  328. package/assets/docs/tree/templates.doc.mjs +7 -1
  329. package/assets/docs/tree/test-in-an-app.doc.mjs +7 -7
  330. package/assets/docs/tree/test-template-in-app.doc.mjs +5 -5
  331. package/assets/docs/tree/themes.doc.mjs +5 -1
  332. package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
  333. package/assets/docs/tree/tokens-data.doc.mjs +2 -2
  334. package/assets/docs/tree/troubleshooting.doc.mjs +29 -13
  335. package/assets/docs/tree/type-scale.doc.mjs +3 -3
  336. package/assets/docs/tree/uninstall.doc.mjs +109 -0
  337. package/assets/docs/tree/updates.doc.mjs +92 -0
  338. package/assets/docs/tree/upgrading.doc.mjs +6 -6
  339. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +15 -3
  340. package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
  341. package/assets/docs/tree/versioning.doc.mjs +14 -9
  342. package/assets/docs/tree/who-answers.doc.mjs +119 -0
  343. package/assets/docs/tree/write-good-templates.doc.mjs +1 -1
  344. package/assets/docs/tree/write-the-template-file.doc.mjs +7 -6
  345. package/assets/docs/use-a-theme.doc.mjs +2 -2
  346. package/assets/docs/use-integrations.doc.mjs +120 -0
  347. package/assets/docs/working-with-ai.doc.mjs +70 -13
  348. package/assets/templates/themes/butter/butterTheme.ts +4 -2
  349. package/assets/templates/themes/stone/stoneTheme.ts +4 -2
  350. package/assets/templates/themes/y2k/y2kTheme.ts +4 -2
  351. package/assets/theme.template.ts +1 -1
  352. package/authoring/codemod/codemod.doc.mjs +7 -3
  353. package/authoring/config/config.doc.mjs +9 -6
  354. package/authoring/config/type.ts +4 -2
  355. package/authoring/debug/parse.d.mts +5 -5
  356. package/authoring/discover/discover.doc.mjs +7 -1
  357. package/authoring/doctypes/_schema.d.mts +8 -3
  358. package/authoring/doctypes/_schema.mjs +1 -0
  359. package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
  360. package/authoring/doctypes/command/command.doc.mjs +20 -12
  361. package/authoring/doctypes/command/type.ts +14 -0
  362. package/authoring/doctypes/component/component.doc.mjs +30 -27
  363. package/authoring/doctypes/component/type.ts +21 -8
  364. package/authoring/doctypes/enum/enum.doc.mjs +7 -4
  365. package/authoring/doctypes/function/function.doc.mjs +9 -8
  366. package/authoring/doctypes/hook/hook.doc.mjs +5 -4
  367. package/authoring/doctypes/hook/type.ts +4 -0
  368. package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
  369. package/authoring/doctypes/reference/reference.doc.mjs +12 -11
  370. package/authoring/doctypes/schema/schema.doc.mjs +10 -10
  371. package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
  372. package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
  373. package/authoring/doctypes/template/parse.d.mts +6 -2
  374. package/authoring/doctypes/template/parse.mjs +3 -1
  375. package/authoring/doctypes/template/template.doc.mjs +3 -3
  376. package/authoring/doctypes/template/type.ts +22 -0
  377. package/authoring/doctypes/theme/theme.doc.mjs +2 -2
  378. package/authoring/gap-report/gap-report.doc.mjs +2 -2
  379. package/authoring/identity/identity.doc.mjs +3 -3
  380. package/authoring/index.d.ts +2 -0
  381. package/authoring/integration/integration.doc.mjs +30 -6
  382. package/authoring/integration/parse.test.mjs +21 -0
  383. package/authoring/integration/schema.d.mts +16 -3
  384. package/authoring/integration/schema.mjs +34 -2
  385. package/authoring/integration/type.ts +13 -1
  386. package/clients/cli/bin/astryx.mjs +11 -65
  387. package/clients/cli/cli-command.test.mjs +166 -0
  388. package/clients/cli/command-result-coverage.test.mjs +6 -5
  389. package/clients/cli/commands/blog.doc.mjs +1 -0
  390. package/clients/cli/commands/build-theme.batch-report.test.mjs +17 -3
  391. package/clients/cli/commands/build-theme.color-scheme.test.mjs +1 -1
  392. package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
  393. package/clients/cli/commands/build-theme.path-safety.test.mjs +224 -6
  394. package/clients/cli/commands/build-theme.registry.test.mjs +5 -2
  395. package/clients/cli/commands/build.doc.mjs +1 -0
  396. package/clients/cli/commands/build.exit-codes-doc.test.mjs +4 -0
  397. package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
  398. package/clients/cli/commands/component.doc.mjs +1 -0
  399. package/clients/cli/commands/{component/index.mjs → component.mjs} +37 -37
  400. package/clients/cli/commands/component.test.mjs +6 -6
  401. package/clients/cli/commands/discover.broken-integration.test.mjs +11 -7
  402. package/clients/cli/commands/discover.doc.mjs +9 -1
  403. package/clients/cli/commands/discover.mjs +144 -93
  404. package/clients/cli/commands/discover.no-source.test.mjs +448 -33
  405. package/clients/cli/commands/discover.sources.test.mjs +20 -1
  406. package/clients/cli/commands/docs.doc.mjs +3 -2
  407. package/clients/cli/commands/docs.mjs +50 -20
  408. package/clients/cli/commands/docs.test.mjs +16 -16
  409. package/clients/cli/commands/doctor-integration-components.doc.mjs +19 -4
  410. package/clients/cli/commands/doctor-integration-docs.doc.mjs +20 -5
  411. package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -0
  412. package/clients/cli/commands/doctor-integration-validate.doc.mjs +22 -2
  413. package/clients/cli/commands/doctor-integration.test.mjs +936 -3
  414. package/clients/cli/commands/doctor.doc.mjs +12 -2
  415. package/clients/cli/commands/doctor.mjs +332 -7
  416. package/clients/cli/commands/doctor.test.mjs +75 -4
  417. package/clients/cli/commands/gap-report.doc.mjs +15 -2
  418. package/clients/cli/commands/gap-report.mjs +24 -2
  419. package/clients/cli/commands/gap-report.test.mjs +79 -0
  420. package/clients/cli/commands/hook.doc.mjs +1 -0
  421. package/clients/cli/commands/{hook/index.mjs → hook.mjs} +22 -22
  422. package/clients/cli/commands/import-hint-correctness.test.mjs +1 -1
  423. package/clients/cli/commands/init.behavior.test.mjs +235 -1
  424. package/clients/cli/commands/init.doc.mjs +55 -10
  425. package/clients/cli/commands/init.flag-help.test.mjs +1 -0
  426. package/clients/cli/commands/init.mjs +2 -2
  427. package/clients/cli/commands/integration-add.doc.mjs +7 -0
  428. package/clients/cli/commands/integration-authoring.test.mjs +49 -3
  429. package/clients/cli/commands/integration-check.doc.mjs +93 -0
  430. package/clients/cli/commands/integration-check.test.mjs +489 -0
  431. package/clients/cli/commands/integration-pack.doc.mjs +8 -1
  432. package/clients/cli/commands/integration-verify.doc.mjs +8 -1
  433. package/clients/cli/commands/integration.doc.mjs +6 -2
  434. package/clients/cli/commands/integration.mjs +119 -7
  435. package/clients/cli/commands/json-contract.test.mjs +11 -2
  436. package/clients/cli/commands/manifest.doc.mjs +2 -1
  437. package/clients/cli/commands/manifest.mjs +67 -0
  438. package/clients/cli/commands/outside-project.test.mjs +874 -0
  439. package/clients/cli/commands/postinstall.doc.mjs +23 -0
  440. package/clients/cli/commands/postinstall.mjs +31 -0
  441. package/clients/cli/commands/search.doc.mjs +1 -0
  442. package/clients/cli/commands/search.mjs +16 -11
  443. package/clients/cli/commands/search.test.mjs +429 -296
  444. package/clients/cli/commands/setup-nudge.test.mjs +180 -2
  445. package/clients/cli/commands/swizzle.doc.mjs +7 -0
  446. package/clients/cli/commands/swizzle.mjs +5 -3
  447. package/clients/cli/commands/swizzle.routing.test.mjs +19 -2
  448. package/clients/cli/commands/template.doc.mjs +1 -0
  449. package/clients/cli/commands/text-json-parity.test.mjs +5 -0
  450. package/clients/cli/commands/theme-add-lifecycle.test.mjs +3 -3
  451. package/clients/cli/commands/theme-add.doc.mjs +8 -1
  452. package/clients/cli/commands/theme-build.doc.mjs +3 -2
  453. package/clients/cli/commands/theme-eject.doc.mjs +1 -0
  454. package/clients/cli/commands/theme-list.behavior.test.mjs +6 -0
  455. package/clients/cli/commands/theme-list.doc.mjs +1 -0
  456. package/clients/cli/commands/theme-palette-generate.doc.mjs +1 -0
  457. package/clients/cli/commands/theme-remove.doc.mjs +7 -0
  458. package/clients/cli/commands/theme-targets.doc.mjs +1 -0
  459. package/clients/cli/commands/theme-template.doc.mjs +1 -0
  460. package/clients/cli/commands/theme-use.doc.mjs +7 -0
  461. package/clients/cli/commands/{build-theme.mjs → theme.mjs} +27 -14
  462. package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
  463. package/clients/cli/commands/upgrade.doc.mjs +26 -3
  464. package/clients/cli/commands/upgrade.file-protection.test.mjs +3 -2
  465. package/clients/cli/commands/upgrade.hook-output.test.mjs +2 -1
  466. package/clients/cli/commands/upgrade.mjs +9 -2
  467. package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
  468. package/clients/cli/commands/upgrade.subfolder-path.test.mjs +97 -0
  469. package/clients/cli/index.mjs +156 -100
  470. package/clients/cli/lib/cli-error.mjs +4 -1
  471. package/clients/cli/lib/component-format.mjs +1 -1
  472. package/clients/cli/lib/component-format.test.mjs +1 -1
  473. package/clients/cli/lib/define-command.mjs +14 -9
  474. package/clients/cli/lib/exit-codes.test.mjs +5 -0
  475. package/clients/cli/lib/json-shim.mjs +3 -1
  476. package/clients/cli/lib/manifest.d.ts +9 -0
  477. package/clients/cli/lib/manifest.mjs +17 -1
  478. package/clients/cli/lib/manifest.test.mjs +37 -0
  479. package/clients/cli/lib/welcome-box.mjs +50 -0
  480. package/clients/cli/run.mjs +108 -0
  481. package/foundation/agent-docs/agent-doc-state.d.mts +67 -13
  482. package/foundation/agent-docs/agent-doc-state.mjs +123 -14
  483. package/foundation/agent-docs/agent-docs.d.mts +104 -15
  484. package/foundation/agent-docs/agent-docs.mjs +1028 -114
  485. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +1239 -17
  486. package/foundation/agent-docs/agent-docs.test.mjs +683 -39
  487. package/foundation/agent-docs/computer-agent-text.d.mts +170 -0
  488. package/foundation/agent-docs/computer-agent-text.mjs +750 -0
  489. package/foundation/agent-docs/computer-agent-text.test.mjs +699 -0
  490. package/foundation/config/project.d.mts +35 -3
  491. package/foundation/config/project.mjs +243 -26
  492. package/foundation/config/project.test.mjs +122 -0
  493. package/foundation/config/theme-state.mjs +5 -4
  494. package/foundation/discovery/authoring-self-docs.d.mts +7 -0
  495. package/foundation/discovery/authoring-self-docs.mjs +17 -4
  496. package/foundation/discovery/authoring-self-docs.test.mjs +15 -3
  497. package/foundation/discovery/authoring-surface.d.mts +1 -1
  498. package/foundation/discovery/authoring-surface.mjs +2 -2
  499. package/foundation/discovery/authoring-surface.test.mjs +1 -1
  500. package/foundation/discovery/cli-self-docs.d.mts +2 -1
  501. package/foundation/discovery/cli-self-docs.mjs +22 -4
  502. package/foundation/discovery/cli-self-docs.test.mjs +3 -2
  503. package/foundation/discovery/component-discovery.d.mts +227 -10
  504. package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
  505. package/foundation/discovery/component-discovery.mjs +940 -57
  506. package/foundation/discovery/component-discovery.test.mjs +96 -0
  507. package/foundation/discovery/component-loader.d.mts +1 -1
  508. package/foundation/discovery/component-replacement.mjs +20 -1
  509. package/foundation/discovery/component-replacement.test.mjs +40 -0
  510. package/foundation/discovery/copied-passages.d.mts +216 -0
  511. package/foundation/discovery/copied-passages.mjs +720 -0
  512. package/foundation/discovery/copied-passages.test.mjs +124 -0
  513. package/foundation/discovery/doc-consistency.d.mts +34 -0
  514. package/foundation/discovery/doc-consistency.mjs +513 -0
  515. package/foundation/discovery/doc-consistency.test.mjs +347 -0
  516. package/foundation/discovery/doc-fluff.d.mts +112 -0
  517. package/foundation/discovery/doc-fluff.mjs +328 -0
  518. package/foundation/discovery/doc-fluff.test.mjs +142 -0
  519. package/foundation/discovery/doc-types.d.mts +157 -0
  520. package/foundation/discovery/doc-types.mjs +1231 -0
  521. package/foundation/discovery/doc-types.test.mjs +744 -0
  522. package/foundation/discovery/docs-discovery.d.mts +88 -0
  523. package/foundation/discovery/docs-discovery.mjs +97 -3
  524. package/foundation/discovery/integration-doc-files.d.mts +22 -0
  525. package/foundation/discovery/integration-doc-files.mjs +231 -0
  526. package/foundation/discovery/integration-doc-files.test.mjs +246 -0
  527. package/foundation/discovery/module-exports.d.mts +68 -0
  528. package/foundation/discovery/module-exports.mjs +609 -31
  529. package/foundation/discovery/module-exports.test.mjs +172 -0
  530. package/foundation/discovery/package-tsconfig.d.mts +14 -0
  531. package/foundation/discovery/package-tsconfig.mjs +228 -0
  532. package/foundation/discovery/package-tsconfig.test.mjs +210 -0
  533. package/foundation/discovery/project-typescript.d.mts +32 -0
  534. package/foundation/discovery/project-typescript.mjs +89 -0
  535. package/foundation/discovery/prop-drift.d.mts +297 -0
  536. package/foundation/discovery/prop-drift.mjs +2428 -0
  537. package/foundation/discovery/prop-drift.test.mjs +2337 -0
  538. package/foundation/discovery/runner-allowlist.d.mts +38 -0
  539. package/foundation/discovery/runner-allowlist.mjs +51 -0
  540. package/foundation/discovery/runner-commands.d.mts +77 -0
  541. package/foundation/discovery/runner-commands.mjs +294 -0
  542. package/foundation/discovery/runner-commands.test.mjs +128 -0
  543. package/foundation/discovery/stray-pointers.d.mts +52 -0
  544. package/foundation/discovery/stray-pointers.mjs +293 -0
  545. package/foundation/discovery/stray-pointers.test.mjs +86 -0
  546. package/foundation/discovery/template-adapter.mjs +92 -6
  547. package/foundation/discovery/template-needs.mjs +6 -46
  548. package/foundation/discovery/theme-discovery.mjs +147 -3
  549. package/foundation/discovery/theme-imports.mjs +8 -4
  550. package/foundation/discovery/theme-imports.test.mjs +1 -1
  551. package/foundation/discovery/type-match.d.mts +53 -0
  552. package/foundation/discovery/type-match.mjs +660 -0
  553. package/foundation/discovery/type-match.test.mjs +169 -0
  554. package/foundation/discovery/type-text.d.mts +68 -0
  555. package/foundation/discovery/type-text.mjs +658 -0
  556. package/foundation/discovery/type-text.test.mjs +196 -0
  557. package/foundation/discovery/unresolved-references.d.mts +62 -0
  558. package/foundation/discovery/unresolved-references.mjs +790 -0
  559. package/foundation/discovery/unresolved-references.test.mjs +567 -0
  560. package/foundation/doc-compiler/doc-loads.test.mjs +84 -10
  561. package/foundation/doc-compiler/inputs.mjs +27 -1
  562. package/foundation/doc-compiler/inputs.test.mjs +0 -1
  563. package/foundation/doc-compiler/links.d.mts +41 -5
  564. package/foundation/doc-compiler/links.mjs +167 -28
  565. package/foundation/doc-compiler/links.test.mjs +97 -4
  566. package/foundation/doc-compiler/read.d.mts +1 -1
  567. package/foundation/doc-compiler/read.mjs +59 -1
  568. package/foundation/doc-compiler/read.test.mjs +11 -2
  569. package/foundation/doc-compiler/split-topic-keywords.test.mjs +3 -2
  570. package/foundation/doc-compiler/tree.d.mts +32 -6
  571. package/foundation/doc-compiler/tree.mjs +107 -44
  572. package/foundation/doc-compiler/tree.test.mjs +14 -7
  573. package/foundation/env/cli-command.d.mts +83 -0
  574. package/foundation/env/cli-command.mjs +152 -0
  575. package/foundation/env/cli-command.test.mjs +129 -0
  576. package/foundation/env/node-version.test.mjs +15 -3
  577. package/foundation/env/package-manager.d.mts +93 -9
  578. package/foundation/env/package-manager.global.test.mjs +66 -0
  579. package/foundation/env/package-manager.mjs +184 -13
  580. package/foundation/env/package-manager.test.mjs +341 -15
  581. package/foundation/env/project-scope.d.mts +9 -0
  582. package/foundation/env/project-scope.mjs +33 -0
  583. package/foundation/env/search-path.d.mts +42 -0
  584. package/foundation/env/search-path.mjs +205 -0
  585. package/foundation/env/search-path.test.mjs +122 -0
  586. package/foundation/env/user-dirs.d.mts +39 -0
  587. package/foundation/env/user-dirs.mjs +93 -0
  588. package/foundation/env/user-dirs.test.mjs +72 -0
  589. package/foundation/env/user-settings.d.mts +46 -0
  590. package/foundation/env/user-settings.mjs +106 -0
  591. package/foundation/env/user-settings.test.mjs +64 -0
  592. package/foundation/fs/file-protection.mjs +15 -1
  593. package/foundation/fs/module-loader.d.mts +2 -1
  594. package/foundation/fs/module-loader.mjs +60 -4
  595. package/foundation/fs/module-loader.stdout.test.mjs +3 -2
  596. package/foundation/fs/module-loader.test.mjs +194 -0
  597. package/foundation/fs/path-compare.d.mts +33 -0
  598. package/foundation/fs/path-compare.mjs +73 -0
  599. package/foundation/fs/paths.d.mts +122 -4
  600. package/foundation/fs/paths.mjs +675 -29
  601. package/foundation/fs/paths.test.mjs +439 -54
  602. package/foundation/fs/read-record.d.mts +18 -0
  603. package/foundation/fs/read-record.mjs +131 -0
  604. package/foundation/fs/read-record.test.mjs +77 -0
  605. package/foundation/integrations/autolink.d.mts +2 -1
  606. package/foundation/integrations/autolink.mjs +4 -13
  607. package/foundation/integrations/cli-peer-version.d.mts +36 -0
  608. package/foundation/integrations/cli-peer-version.mjs +132 -0
  609. package/foundation/integrations/cli-peer-version.test.mjs +354 -0
  610. package/foundation/integrations/computer-integrations.d.mts +81 -0
  611. package/foundation/integrations/computer-integrations.mjs +345 -0
  612. package/foundation/integrations/computer-integrations.test.mjs +292 -0
  613. package/foundation/integrations/contribution-inventory.d.mts +26 -20
  614. package/foundation/integrations/contribution-inventory.mjs +97 -8
  615. package/foundation/integrations/exports-subpaths.d.mts +57 -0
  616. package/foundation/integrations/exports-subpaths.mjs +113 -0
  617. package/foundation/integrations/integration-warnings.mjs +3 -2
  618. package/foundation/integrations/integration-warnings.test.mjs +8 -9
  619. package/foundation/integrations/integrations.d.mts +51 -1
  620. package/foundation/integrations/integrations.mjs +106 -4
  621. package/foundation/integrations/issue.ts +6 -0
  622. package/foundation/integrations/public-imports.d.mts +118 -0
  623. package/foundation/integrations/public-imports.mjs +1769 -0
  624. package/foundation/integrations/public-imports.test.mjs +1793 -0
  625. package/foundation/integrations/validate-contributions.d.mts +117 -0
  626. package/foundation/integrations/validate-contributions.mjs +1209 -14
  627. package/foundation/release/agent-text-worker.d.mts +4 -0
  628. package/foundation/release/agent-text-worker.mjs +52 -0
  629. package/foundation/release/cache.d.mts +310 -0
  630. package/foundation/release/cache.mjs +1216 -0
  631. package/foundation/release/cache.test.mjs +923 -0
  632. package/foundation/release/choose.d.mts +207 -0
  633. package/foundation/release/choose.mjs +677 -0
  634. package/foundation/release/choose.test.mjs +427 -0
  635. package/foundation/release/core-worker.d.mts +4 -0
  636. package/foundation/release/core-worker.mjs +38 -0
  637. package/foundation/release/global-state.d.mts +263 -0
  638. package/foundation/release/global-state.mjs +474 -0
  639. package/foundation/release/global-state.test.mjs +381 -0
  640. package/foundation/release/handoff.d.mts +79 -0
  641. package/foundation/release/handoff.e2e.test.mjs +278 -0
  642. package/foundation/release/handoff.mjs +524 -0
  643. package/foundation/release/lock-lease.d.mts +23 -0
  644. package/foundation/release/lock-lease.mjs +80 -0
  645. package/foundation/release/notices.d.mts +307 -0
  646. package/foundation/release/notices.mjs +707 -0
  647. package/foundation/release/notices.test.mjs +586 -0
  648. package/foundation/release/npm-guard.d.mts +4 -0
  649. package/foundation/release/npm-guard.mjs +126 -0
  650. package/foundation/release/project.d.mts +141 -0
  651. package/foundation/release/project.mjs +466 -0
  652. package/foundation/release/project.test.mjs +288 -0
  653. package/foundation/release/refresh-worker.d.mts +4 -0
  654. package/foundation/release/refresh-worker.mjs +27 -0
  655. package/foundation/release/run-context.d.mts +47 -0
  656. package/foundation/release/run-context.mjs +163 -0
  657. package/foundation/release/update-notice-env.d.mts +28 -0
  658. package/foundation/release/update-notice-env.mjs +39 -0
  659. package/foundation/response/base.d.ts +26 -3
  660. package/foundation/response/error-codes.d.mts +3 -1
  661. package/foundation/response/error-codes.doc.mjs +12 -0
  662. package/foundation/response/error-codes.mjs +17 -0
  663. package/foundation/response/error-codes.test.mjs +2 -0
  664. package/foundation/response/json-contract.test.mjs +7 -2
  665. package/foundation/response/json.mjs +4 -1
  666. package/foundation/response/response-types.doc.mjs +22 -11
  667. package/foundation/response/response-types.doc.test.mjs +46 -0
  668. package/foundation/response/response.doc.mjs +3 -3
  669. package/foundation/route/route.d.mts +285 -0
  670. package/foundation/route/route.mjs +324 -0
  671. package/foundation/route/route.test.mjs +153 -0
  672. package/foundation/runtime/hosted-runtime.test.mjs +403 -0
  673. package/foundation/runtime/locked-versions.d.mts +32 -0
  674. package/foundation/runtime/locked-versions.mjs +65 -0
  675. package/foundation/runtime/package-root.d.mts +91 -0
  676. package/foundation/runtime/package-root.mjs +174 -0
  677. package/foundation/runtime/package-set.d.mts +62 -0
  678. package/foundation/runtime/package-set.mjs +130 -0
  679. package/foundation/runtime/package-set.test.mjs +432 -0
  680. package/foundation/text/string-utils.d.mts +2 -1
  681. package/foundation/text/string-utils.mjs +16 -5
  682. package/foundation/text/suggest-order.d.mts +72 -0
  683. package/foundation/text/suggest-order.mjs +363 -0
  684. package/foundation/text/suggest-order.test.mjs +259 -0
  685. package/foundation/xle/browser-imports.test.mjs +74 -0
  686. package/foundation/xle/registry.mjs +4 -0
  687. package/foundation/xle/registry.test.mjs +28 -0
  688. package/host/door-conformance.test.mjs +274 -0
  689. package/host/index.d.ts +116 -0
  690. package/host/index.mjs +295 -0
  691. package/host/index.test.mjs +302 -0
  692. package/package.json +16 -11
  693. package/scripts/postinstall.mjs +24 -5
  694. package/assets/docs/tree/integrations.doc.mjs +0 -40
@@ -10,7 +10,8 @@
10
10
  */
11
11
  export function validateLocalIntegration(cwd?: string): Promise<ValidateResult>;
12
12
  /**
13
- * Validate an INSTALLED integration package resolved from `cwd`/node_modules.
13
+ * Validate an INSTALLED integration package: the nearest `node_modules/<spec>`
14
+ * at or above `cwd`, resolved the way the project loads it.
14
15
  * @param {string} spec package name
15
16
  * @param {string} [cwd]
16
17
  * @returns {Promise<ValidateResult>}
@@ -43,7 +44,6 @@ export function summarizeIssues(issues: Issue[]): {
43
44
  errors: number;
44
45
  warnings: number;
45
46
  };
46
- export { validateLoadedIntegration };
47
47
  export type Issue = import("../../foundation/integrations/issue").AstryxIntegrationIssue;
48
48
  export type ValidateResult = {
49
49
  /**
@@ -67,6 +67,27 @@ export type ValidateResult = {
67
67
  */
68
68
  reason?: "no_package_json" | undefined;
69
69
  issues: Issue[];
70
+ /**
71
+ * Information that
72
+ * fails nothing, such as `invalid_cli_command` (a malformed `cliCommand`).
73
+ */
74
+ notes?: {
75
+ code: string;
76
+ message: string;
77
+ }[] | undefined;
78
+ /**
79
+ * Layout findings added after the last minor
80
+ * release: validate lists them as notes, which count nowhere, since they
81
+ * may not fail `--strict` until the next (architecture:cli-surface INV35);
82
+ * `integration verify` still fails on a package.json npm cannot pack.
83
+ */
84
+ listed?: import("../../foundation/integrations/issue").AstryxIntegrationIssue[] | undefined;
70
85
  integration?: import("../../foundation/integrations/integrations.mjs").LoadedIntegration | undefined;
86
+ /**
87
+ * what the public-import check could not judge
88
+ */
89
+ publicImports?: import("./validate-integration.type.mjs").PublicImportsReport | undefined;
71
90
  };
72
91
  import { validateLoadedIntegration } from '../../foundation/integrations/validate-contributions.mjs';
92
+ import { isListedIssue } from '../../foundation/integrations/validate-contributions.mjs';
93
+ export { validateLoadedIntegration, isListedIssue };
@@ -12,7 +12,7 @@
12
12
  * - validateLocalIntegration(cwd) — the package rooted at `cwd` (nearest
13
13
  * package.json + sibling astryx.integration.{ts,mjs,js}).
14
14
  * - validateInstalledIntegration(spec, cwd) — an installed package resolved
15
- * from `cwd`/node_modules.
15
+ * from the node_modules chain at or above `cwd`.
16
16
  *
17
17
  * Both return a { found, name, version, manifestFile, issues } result. `found`
18
18
  * is false only for the no-manifest local case, which is guidance (not an
@@ -34,6 +34,10 @@
34
34
  import * as fs from 'node:fs';
35
35
  import * as path from 'node:path';
36
36
  import {assertWithin} from '../../foundation/fs/path-safety.mjs';
37
+ import {normalizeProviderId} from '../../foundation/identity/provider-identity.mjs';
38
+ import {integrationDocTypes} from '../docs/_adapter.mjs';
39
+ import {integrationDocConsistency} from '../../foundation/discovery/doc-consistency.mjs';
40
+ import {integrationRunnerCommands} from './_adapter.mjs';
37
41
  import {
38
42
  THEME_SLUG_RE,
39
43
  unreadThemeFolders,
@@ -49,18 +53,31 @@ import {
49
53
  import {
50
54
  findManifestPaths,
51
55
  loadManifest,
52
- resolvePackageDir,
56
+ resolveInstalledIntegrationDir,
53
57
  } from '../../foundation/integrations/integrations.mjs';
54
58
  // The on-disk contribution validators live in foundation: Project and
55
59
  // integration-warnings need them too, and foundation must not depend on api.
56
60
  import {
61
+ blockComponentsCheck,
62
+ componentDocNamesCheck,
63
+ INVALID_CLI_COMMAND,
64
+ isListedIssue,
65
+ issueListed as listed,
57
66
  validateLoadedIntegration,
67
+ validateLoadedIntegrationListed,
58
68
  issueError as error,
59
69
  issueWarning as warning,
60
70
  rootProblem,
61
71
  } from '../../foundation/integrations/validate-contributions.mjs';
72
+ import {formatCliCommand} from '../../foundation/env/package-manager.mjs';
73
+ import {cliPeerVersionProblem} from '../../foundation/integrations/cli-peer-version.mjs';
74
+ import {publicImportIssues} from '../../foundation/integrations/public-imports.mjs';
75
+ import {runChoice} from '../../foundation/release/run-context.mjs';
62
76
 
63
- export {validateLoadedIntegration};
77
+ /** The running CLI is outside the package's `@astryxdesign/cli` peer range. */
78
+ const CLI_PEER_VERSION = 'cli_peer_version';
79
+
80
+ export {validateLoadedIntegration, isListedIssue};
64
81
 
65
82
  /**
66
83
  * @typedef {import('../../foundation/integrations/issue').AstryxIntegrationIssue} Issue
@@ -74,7 +91,15 @@ export {validateLoadedIntegration};
74
91
  * @property {string} [manifestFile] Absolute path to the loaded manifest.
75
92
  * @property {'no_package_json'} [reason] Why nothing was validated (internal).
76
93
  * @property {Issue[]} issues
94
+ * @property {Array<{code: string, message: string}>} [notes] Information that
95
+ * fails nothing, such as `invalid_cli_command` (a malformed `cliCommand`).
96
+ * @property {Issue[]} [listed] Layout findings added after the last minor
97
+ * release: validate lists them as notes, which count nowhere, since they
98
+ * may not fail `--strict` until the next (architecture:cli-surface INV35);
99
+ * `integration verify` still fails on a package.json npm cannot pack.
77
100
  * @property {import('../../foundation/integrations/integrations.mjs').LoadedIntegration} [integration]
101
+ * @property {import('./validate-integration.type.mjs').PublicImportsReport} [publicImports]
102
+ * what the public-import check could not judge
78
103
  */
79
104
 
80
105
  /**
@@ -93,6 +118,14 @@ function findNearestPackageJson(cwd) {
93
118
  }
94
119
  }
95
120
 
121
+ const ROOT_KINDS = /** @type {const} */ ([
122
+ 'components',
123
+ 'templates',
124
+ 'codemods',
125
+ 'docs',
126
+ 'themes',
127
+ ]);
128
+
96
129
  const UNREACHABLE_SCAN_LIMIT = 5_000;
97
130
  const UNREACHABLE_SKIP_DIRS = new Set([
98
131
  'node_modules',
@@ -123,7 +156,7 @@ function unreadThemeFolderIssues(packageDir, loaded) {
123
156
  let fix;
124
157
  if (THEME_SLUG_RE.test(name)) {
125
158
  const stem = `${name.replace(/-([a-z0-9])/gu, (_, character) => character.toUpperCase())}Theme`;
126
- fix = `if it is a theme, add ${stem}.ts and ${stem}.doc.mjs to it (\`astryx integration add theme ${name}\` writes both) and move its code into ${stem}.ts; if not, ${hide}.`;
159
+ fix = `if it is a theme, add ${stem}.ts and ${stem}.doc.mjs to it (\`${formatCliCommand(`integration add theme ${name}`, packageDir)}\` writes both) and move its code into ${stem}.ts; if not, ${hide}.`;
127
160
  } else {
128
161
  fix = `${hide}; a theme folder needs a lower-kebab name.`;
129
162
  }
@@ -142,27 +175,51 @@ function unreadThemeFolderIssues(packageDir, loaded) {
142
175
  *
143
176
  * @param {string} packageDir
144
177
  * @param {import('../../foundation/integrations/integrations.mjs').LoadedIntegration} loaded
178
+ * @param {string[]} [reported] folders whose files another issue already covers
145
179
  * @returns {Promise<Issue[]>}
146
180
  */
147
- async function findUnreachableContributionIssues(packageDir, loaded) {
181
+ async function findUnreachableContributionIssues(
182
+ packageDir,
183
+ loaded,
184
+ reported = [],
185
+ ) {
186
+ // A root that is not a readable folder holds nothing: a fix must never
187
+ // send a file into it.
188
+ const usable = {...loaded};
189
+ for (const kind of ROOT_KINDS) {
190
+ const root = usable[kind];
191
+ if (root != null && rootProblem(root)) usable[kind] = undefined;
192
+ }
193
+ // Every declared root is skipped, readable or not: one that cannot be read
194
+ // has its own issue.
148
195
  const roots = /** @type {string[]} */ (
149
- [
150
- loaded.components,
151
- loaded.templates,
152
- loaded.codemods,
153
- loaded.docs,
154
- loaded.themes,
155
- ].filter(Boolean)
196
+ ROOT_KINDS.map(kind => loaded[kind]).filter(Boolean)
156
197
  );
198
+ // A folder a symlinked root points at is read through that root.
199
+ const realRoots = roots.map(root => {
200
+ try {
201
+ return fs.realpathSync(root);
202
+ } catch {
203
+ return root;
204
+ }
205
+ });
157
206
  /** @type {Issue[]} */
158
207
  const issues = [];
159
- const context = createFixContext(packageDir, loaded);
208
+ const context = createFixContext(packageDir, usable);
160
209
  let scanned = 0;
161
210
  let truncated = false;
162
211
 
163
212
  /** @param {string} dir */
164
213
  async function walk(dir) {
165
214
  if (roots.some(root => pathIsInside(dir, root))) return;
215
+ if (reported.some(folder => pathIsInside(dir, folder))) return;
216
+ let realDir = dir;
217
+ try {
218
+ realDir = fs.realpathSync(dir);
219
+ } catch {
220
+ // Unreadable: reported below.
221
+ }
222
+ if (realRoots.some(root => pathIsInside(realDir, root))) return;
166
223
  let entries;
167
224
  try {
168
225
  entries = fs
@@ -229,13 +286,15 @@ async function findUnreachableContributionIssues(packageDir, loaded) {
229
286
  * Shared core for the local and installed entry points.
230
287
  * @param {string} packageDir
231
288
  * @param {{name: string, version?: string}} identity
232
- * @param {{scanUnreachable?: boolean}} [options]
289
+ * @param {{scanUnreachable?: boolean, own?: boolean, cwd?: string}} [options]
290
+ * `own`: the package is the one being authored in the current folder;
291
+ * `cwd`: the folder whose package manager an install command names
233
292
  * @returns {Promise<ValidateResult>}
234
293
  */
235
294
  async function validateAtPackageDir(
236
295
  packageDir,
237
296
  identity,
238
- {scanUnreachable = false} = {},
297
+ {scanUnreachable = false, own = false, cwd = packageDir} = {},
239
298
  ) {
240
299
  /** @type {Issue[]} */
241
300
  const issues = [];
@@ -280,21 +339,53 @@ async function validateAtPackageDir(
280
339
  let manifest;
281
340
  /** @type {string[]} */
282
341
  let unknownKeys;
342
+ /** @type {string[]} */
343
+ let declaredKeys;
283
344
  /** @type {string | undefined} */
284
345
  let agentDocsError;
346
+ /** @type {string | undefined} */
347
+ let cliCommandError;
285
348
  try {
286
- ({manifest, unknownKeys, agentDocsError} = await loadManifest(
287
- manifestFile,
288
- `Integration manifest (${path.basename(manifestFile)})`,
289
- ));
349
+ ({manifest, unknownKeys, declaredKeys, agentDocsError, cliCommandError} =
350
+ await loadManifest(
351
+ manifestFile,
352
+ `Integration manifest (${path.basename(manifestFile)})`,
353
+ ));
290
354
  } catch (err) {
291
355
  issues.push(error('invalid_manifest', /** @type {any} */ (err).message));
292
356
  return result;
293
357
  }
294
358
 
295
- /** @param {string | null | undefined} value */
296
- const resolveRoot = (value, kind = 'contribution root') => {
359
+ /** @type {string[]} absolute roots inside the package */
360
+ const absoluteRoots = [];
361
+ /**
362
+ * @param {string | null | undefined} value
363
+ * @param {string} key the manifest key that declares it
364
+ */
365
+ const resolveRoot = (value, key, kind = 'contribution root') => {
297
366
  if (value == null) return undefined;
367
+ if (path.isAbsolute(value)) {
368
+ // An absolute root names this machine's disk, which no install shares,
369
+ // even when it happens to point inside the package.
370
+ const inside = path.relative(packageDir, value);
371
+ const relative =
372
+ inside === '' || (!inside.startsWith('..') && !path.isAbsolute(inside))
373
+ ? `./${inside.split(path.sep).join('/')}`.replace(/\/$/u, '')
374
+ : null;
375
+ // The code an absolute root has always carried, reworded.
376
+ result.issues.push(
377
+ error(
378
+ 'root_outside_package',
379
+ `The ${key} root "${value}" is an absolute path, so Astryx reads nothing from it: a root is relative to the package, so it resolves the same wherever the package is installed.` +
380
+ (relative
381
+ ? ` Fix: set \`${key}: '${relative === './' ? '.' : relative}'\` in ${path.basename(manifestFile)}.`
382
+ : ` It also points outside the package. Fix: move the files into the package and set \`${key}\` to their folder relative to package.json, such as './${key}'.`),
383
+ ),
384
+ );
385
+ // Its files are reported through this issue, not one by one.
386
+ if (relative) absoluteRoots.push(path.resolve(value));
387
+ return undefined;
388
+ }
298
389
  try {
299
390
  return assertWithin(value, packageDir, {label: kind});
300
391
  } catch {
@@ -311,16 +402,20 @@ async function validateAtPackageDir(
311
402
  const loaded = {
312
403
  name: identity.name,
313
404
  version: identity.version,
314
- components: resolveRoot(manifest.components),
315
- templates: resolveRoot(manifest.templates),
316
- codemods: resolveRoot(manifest.codemods),
317
- docs: resolveRoot(manifest.docs),
318
- themes: resolveRoot(manifest.themes),
405
+ components: resolveRoot(manifest.components, 'components'),
406
+ templates: resolveRoot(manifest.templates, 'templates'),
407
+ codemods: resolveRoot(manifest.codemods, 'codemods'),
408
+ docs: resolveRoot(manifest.docs, 'docs'),
409
+ themes: resolveRoot(manifest.themes, 'themes'),
319
410
  issuesUrl: manifest.issuesUrl,
320
411
  agentDocs: manifest.agentDocs,
412
+ cliCommand: manifest.cliCommand,
413
+ __cliCommandError: cliCommandError,
321
414
  __agentDocsError: agentDocsError,
322
415
  __unknownKeys: unknownKeys,
416
+ __declaredKeys: declaredKeys,
323
417
  __spec: identity.name,
418
+ __declaredProviderId: manifest.providerId,
324
419
  __packageDir: packageDir,
325
420
  __manifestFile: manifestFile,
326
421
  };
@@ -328,12 +423,70 @@ async function validateAtPackageDir(
328
423
 
329
424
  // Roots + contribution checks are shared with validateLoadedIntegration so
330
425
  // the everyday-command nudge runs the exact same validators.
331
- issues.push(...(await validateLoadedIntegration(loaded)));
426
+ // A malformed `cliCommand` is an info note beside the issues, not an issue:
427
+ // `integration check --strict` fails on any warning, and a new failure code
428
+ // joins only in a minor release (architecture:cli-surface INV35). Doctor's
429
+ // project check still warns about it.
430
+ const contribution = await validateLoadedIntegrationListed(loaded);
431
+ (result.listed ??= []).push(...contribution.listed);
432
+ for (const issue of contribution.issues) {
433
+ if (issue.code === INVALID_CLI_COMMAND) {
434
+ (result.notes ??= []).push({code: issue.code, message: issue.message});
435
+ } else {
436
+ issues.push(issue);
437
+ }
438
+ }
439
+ // The running CLI outside the package's `@astryxdesign/cli` peer range is a
440
+ // note for the same reason. It is built here, not among the contribution
441
+ // checks, so `integration verify` (which reports their layout findings)
442
+ // does not see it.
443
+ // The version an upgrade starts from is the project's: its own CLI's, or,
444
+ // with none, its Core's, as the project-upgrade notice takes it.
445
+ const choice = runChoice(cwd);
446
+ const from =
447
+ choice.inProject && choice.copy === 'starting' && choice.coreVersion
448
+ ? choice.coreVersion
449
+ : undefined;
450
+ const peerProblem = cliPeerVersionProblem(loaded, undefined, cwd, {
451
+ own,
452
+ from,
453
+ });
454
+ if (peerProblem) {
455
+ (result.notes ??= []).push({code: CLI_PEER_VERSION, message: peerProblem});
456
+ }
332
457
  if (loaded.themes && !rootProblem(loaded.themes))
333
458
  issues.push(...unreadThemeFolderIssues(packageDir, loaded));
459
+ // What the docs say that no reader serves: a prop listed twice, an
460
+ // overlay's text for a prop the doc lacks, an empty or unreachable section,
461
+ // and an overlay of no topic.
462
+ issues.push(
463
+ ...(await integrationDocConsistency(
464
+ {
465
+ components:
466
+ loaded.components && !rootProblem(loaded.components)
467
+ ? loaded.components
468
+ : undefined,
469
+ docs:
470
+ loaded.docs && !rootProblem(loaded.docs) ? loaded.docs : undefined,
471
+ },
472
+ packageDir,
473
+ )),
474
+ );
475
+ // What the package tells apps to import, read from source: package.json
476
+ // `exports`, docs, examples and template imports.
477
+ const publicImports = await publicImportIssues(packageDir, loaded);
478
+ issues.push(...publicImports.issues);
479
+ // Each finding is a note until the next minor makes it a warning.
480
+ if (publicImports.notes.length > 0)
481
+ (result.notes ??= []).push(...publicImports.notes);
482
+ result.publicImports = publicImports.report;
334
483
  if (scanUnreachable) {
335
484
  issues.push(
336
- ...(await findUnreachableContributionIssues(packageDir, loaded)),
485
+ ...(await findUnreachableContributionIssues(
486
+ packageDir,
487
+ loaded,
488
+ absoluteRoots,
489
+ )),
337
490
  );
338
491
  }
339
492
 
@@ -360,7 +513,7 @@ export async function validateLocalIntegration(cwd = process.cwd()) {
360
513
  return {found: false, issues: []};
361
514
  }
362
515
 
363
- /** @type {{name?: string, version?: string}} */
516
+ /** @type {{name?: string, version?: string, private?: boolean}} */
364
517
  let pkg;
365
518
  try {
366
519
  pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
@@ -379,31 +532,121 @@ export async function validateLocalIntegration(cwd = process.cwd()) {
379
532
  };
380
533
  }
381
534
 
382
- return validateAtPackageDir(
535
+ // npm publishes nothing without a name and a version, and the name is the
536
+ // provider ID every reader keys the package's contributions on.
537
+ // A package without one is still checked, under a placeholder name.
538
+ const fields = packageJsonFieldIssues(pkg, pkgJsonPath);
539
+ const name =
540
+ typeof pkg.name === 'string' && pkg.name !== ''
541
+ ? pkg.name
542
+ : '(local package)';
543
+ const result = await validateAtPackageDir(
383
544
  packageDir,
384
- {
385
- name: pkg.name ?? '(local package)',
386
- version: pkg.version,
387
- },
388
- {scanUnreachable: true},
545
+ {name, version: pkg.version},
546
+ {scanUnreachable: true, own: true},
547
+ );
548
+ (result.listed ??= []).unshift(
549
+ ...fields,
550
+ // Only a manifest that loaded says whether it declares a providerId; one
551
+ // that did not is reported as invalid_manifest.
552
+ ...(result.integration
553
+ ? providerIdIssues(
554
+ pkg.name,
555
+ result.integration.__declaredProviderId,
556
+ result.integration.__manifestFile,
557
+ )
558
+ : []),
389
559
  );
560
+ return result;
390
561
  }
391
562
 
392
563
  /**
393
- * Validate an INSTALLED integration package resolved from `cwd`/node_modules.
564
+ * Whether `name` is a bare npm package name, the form a provider ID takes.
565
+ * @param {string} name
566
+ */
567
+ function isPackageName(name) {
568
+ try {
569
+ normalizeProviderId(name);
570
+ return true;
571
+ } catch {
572
+ return false;
573
+ }
574
+ }
575
+
576
+ /**
577
+ * A warning when no provider ID can be derived for the package: its
578
+ * package.json `name` is not a bare package name and its manifest declares
579
+ * no `providerId` that is one. Readers key the package's contributions on
580
+ * that ID; a missing name is its own warning.
581
+ * @param {unknown} name package.json `name`
582
+ * @param {unknown} declared the manifest's `providerId`
583
+ * @param {string} manifestFile
584
+ * @returns {Issue[]}
585
+ */
586
+ function providerIdIssues(name, declared, manifestFile) {
587
+ if (typeof name !== 'string' || name === '') return [];
588
+ if (isPackageName(name)) return [];
589
+ if (typeof declared === 'string' && isPackageName(declared)) return [];
590
+ const manifest = path.basename(manifestFile);
591
+ return [
592
+ listed(
593
+ 'no_provider_id',
594
+ `No provider ID can be derived for this package: package.json "name" ${JSON.stringify(name)} is not a bare package name (an optional @scope/ and a name, each starting with a lowercase letter or digit and holding only lowercase letters, digits, "-", ".", "_" and "~"), and ${manifest} declares no providerId that is one. Astryx files the package's components, templates and docs under that ID, so links to them and selecting the package cannot work. Fix: rename the package, such as "@your-scope/your-package", or set \`providerId: '@your-scope/your-package'\` in ${manifest}.`,
595
+ ),
596
+ ];
597
+ }
598
+
599
+ /**
600
+ * A warning for each field npm needs that package.json lacks.
601
+ * @param {{name?: unknown, version?: unknown, private?: unknown}} pkg
602
+ * @param {string} pkgJsonPath
603
+ * @returns {Issue[]}
604
+ */
605
+ function packageJsonFieldIssues(pkg, pkgJsonPath) {
606
+ /** @type {Issue[]} */
607
+ const issues = [];
608
+ const shown = path.basename(pkgJsonPath);
609
+ // Listed, so validate and `--strict` keep the result they had for these
610
+ // packages; `integration verify`, which packs, reports them as errors.
611
+ if (typeof pkg.name !== 'string' || pkg.name === '') {
612
+ issues.push(
613
+ listed(
614
+ 'invalid_package_json',
615
+ `${shown} has no "name", so npm cannot pack or publish the package, and a project that installs it has no name to select it by. Fix: add "name": "@your-scope/your-package" to ${shown}.`,
616
+ ),
617
+ );
618
+ }
619
+ // A private package is never published, so it needs no version.
620
+ if (
621
+ pkg.private !== true &&
622
+ (typeof pkg.version !== 'string' || pkg.version === '')
623
+ ) {
624
+ issues.push(
625
+ listed(
626
+ 'invalid_package_json',
627
+ `${shown} has no "version", so npm cannot pack or publish the package. Fix: add "version": "0.1.0" to ${shown}.`,
628
+ ),
629
+ );
630
+ }
631
+ return issues;
632
+ }
633
+
634
+ /**
635
+ * Validate an INSTALLED integration package: the nearest `node_modules/<spec>`
636
+ * at or above `cwd`, resolved the way the project loads it.
394
637
  * @param {string} spec package name
395
638
  * @param {string} [cwd]
396
639
  * @returns {Promise<ValidateResult>}
397
640
  */
398
641
  export async function validateInstalledIntegration(spec, cwd = process.cwd()) {
399
- // resolvePackageDir throws (path-safety guard) on a spec with path segments,
642
+ // The resolver throws (path-safety guard) on a spec with path segments,
400
643
  // `..`, or an absolute path. Every other malformed input to this command
401
644
  // degrades into a diagnostic — so catch it here and return an issue instead
402
645
  // of letting the throw escape to a raw stack (human) / generic ERR_UNKNOWN
403
646
  // (--json).
404
647
  let packageDir;
405
648
  try {
406
- packageDir = resolvePackageDir(spec, cwd);
649
+ packageDir = resolveInstalledIntegrationDir(spec, cwd);
407
650
  } catch (err) {
408
651
  return {
409
652
  found: true,
@@ -435,10 +678,29 @@ export async function validateInstalledIntegration(spec, cwd = process.cwd()) {
435
678
  };
436
679
  }
437
680
 
438
- return validateAtPackageDir(packageDir, {
439
- name: pkg.name ?? spec,
440
- version: pkg.version,
441
- });
681
+ return validateAtPackageDir(
682
+ packageDir,
683
+ {name: pkg.name ?? spec, version: pkg.version},
684
+ {cwd},
685
+ );
686
+ }
687
+
688
+ /**
689
+ * The runner-command notes for a package's topics: each Astryx command a topic
690
+ * writes with a package runner, where the doc file is, and the bare command to
691
+ * write.
692
+ * @param {any} integration a loaded integration
693
+ * @returns {Promise<Array<{code: string, message: string}>>}
694
+ */
695
+ async function runnerCommandNotes(integration) {
696
+ const packageDir = integration.__packageDir;
697
+ return (await integrationRunnerCommands(integration)).map(each => ({
698
+ code: 'runner_command',
699
+ message:
700
+ typeof packageDir === 'string'
701
+ ? `${path.relative(packageDir, each.file).split(path.sep).join('/')}: ${each.message}`
702
+ : each.message,
703
+ }));
442
704
  }
443
705
 
444
706
  /**
@@ -461,6 +723,41 @@ export async function validateIntegration(pkg, options = {}) {
461
723
  const result = pkg
462
724
  ? await validateInstalledIntegration(pkg, cwd)
463
725
  : await validateLocalIntegration(cwd);
726
+ // Each doc the package ships, against the published authoring type for its
727
+ // kind, read with the project's own compiler. Findings are warnings only.
728
+ const integration = result.found ? result.integration : undefined;
729
+ const docTypes = integration
730
+ ? await integrationDocTypes(integration, cwd)
731
+ : undefined;
732
+ // The component names docs and blocks give: those that cannot be judged
733
+ // are listed in their reports, and those judged wrong are notes.
734
+ const names = integration
735
+ ? [
736
+ await componentDocNamesCheck(integration),
737
+ await blockComponentsCheck(integration),
738
+ ]
739
+ : undefined;
740
+ const docNames = names?.[0].report;
741
+ const blockComponents = names?.[1].report;
742
+ // Notes fail nothing: a malformed `cliCommand`, and the findings added
743
+ // after the last minor release, each with its fix in the message, which
744
+ // may not fail `--strict` until the next (architecture:cli-surface INV35):
745
+ // the layout findings and the component names judged wrong.
746
+ const notes = result.found
747
+ ? [
748
+ ...(result.notes ?? []),
749
+ ...(result.listed ?? []).map(issue => ({
750
+ code: issue.code,
751
+ message: issue.message,
752
+ })),
753
+ ...(names ?? []).flatMap(each => each.notes),
754
+ ]
755
+ : [];
756
+ // Each Astryx command a topic writes with a package runner, as a
757
+ // `runner_command` note with its fix, the same way.
758
+ if (integration?.docs) {
759
+ notes.push(...(await runnerCommandNotes(integration)));
760
+ }
464
761
  return {
465
762
  type: 'integration.validate',
466
763
  data: {
@@ -469,9 +766,25 @@ export async function validateIntegration(pkg, options = {}) {
469
766
  validated: result.found,
470
767
  name: result.found ? (result.name ?? null) : null,
471
768
  version: result.found ? (result.version ?? null) : null,
472
- issues: result.reason === 'no_package_json'
473
- ? [{code: 'no_package', severity: 'error', message: 'No package.json found. Run this command inside a package directory.'}]
474
- : result.issues,
769
+ issues:
770
+ result.reason === 'no_package_json'
771
+ ? [
772
+ {
773
+ code: 'no_package',
774
+ severity: 'error',
775
+ message:
776
+ 'No package.json found. Run this command inside a package directory.',
777
+ },
778
+ ]
779
+ : result.issues,
780
+ ...(notes.length > 0 ? {notes} : {}),
781
+ ...(docTypes ? {docTypes} : {}),
782
+ ...(docNames ? {docNames} : {}),
783
+ ...(blockComponents ? {blockComponents} : {}),
784
+ // What the public-import check could not judge: listed, never failed on.
785
+ ...(result.found && result.publicImports
786
+ ? {publicImports: result.publicImports}
787
+ : {}),
475
788
  },
476
789
  };
477
790
  }