@ng-prism/core 22.5.0 → 22.7.0-beta.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 (437) hide show
  1. package/README.md +13 -9
  2. package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
  3. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
  4. package/dist/app/canvas/canvas-bg.styles.js +1 -1
  5. package/dist/app/canvas/canvas-overlay-tokens.d.ts +12 -0
  6. package/dist/app/canvas/canvas-overlay-tokens.d.ts.map +1 -0
  7. package/dist/app/canvas/canvas-overlay-tokens.js +52 -0
  8. package/dist/app/canvas/prism-canvas-bg-pill.component.js +2 -2
  9. package/dist/app/canvas/prism-canvas-pin-row.component.js +2 -2
  10. package/dist/app/canvas/prism-canvas-rulers.component.d.ts +2 -0
  11. package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
  12. package/dist/app/canvas/prism-canvas-rulers.component.js +17 -12
  13. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +25 -3
  14. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-canvas-toolbar.component.js +154 -89
  16. package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
  17. package/dist/app/canvas/prism-template-popover.component.js +16 -7
  18. package/dist/app/canvas/state-chips.d.ts +50 -0
  19. package/dist/app/canvas/state-chips.d.ts.map +1 -0
  20. package/dist/app/canvas/state-chips.js +40 -0
  21. package/dist/app/component-head/head-metrics.d.ts +35 -19
  22. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  23. package/dist/app/component-head/head-metrics.js +57 -27
  24. package/dist/app/component-head/pipe-facts.d.ts +9 -0
  25. package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
  26. package/dist/app/component-head/pipe-facts.js +15 -0
  27. package/dist/app/component-head/prism-component-head.component.d.ts +20 -22
  28. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-component-head.component.js +85 -96
  30. package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
  31. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  32. package/dist/app/component-head/prism-head-gauge.component.js +51 -67
  33. package/dist/app/component-head/prism-head-info.component.d.ts +14 -2
  34. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  35. package/dist/app/component-head/prism-head-info.component.js +84 -20
  36. package/dist/app/component-head/prism-stat.component.d.ts +4 -5
  37. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  38. package/dist/app/component-head/prism-stat.component.js +16 -12
  39. package/dist/app/component-head/service-facts.d.ts +8 -0
  40. package/dist/app/component-head/service-facts.d.ts.map +1 -0
  41. package/dist/app/component-head/service-facts.js +11 -0
  42. package/dist/app/controls/boolean-control.component.js +2 -2
  43. package/dist/app/controls/json-control.component.js +2 -2
  44. package/dist/app/controls/union-control.component.js +4 -3
  45. package/dist/app/directives/resize-value.d.ts +1 -1
  46. package/dist/app/directives/resize-value.js +1 -1
  47. package/dist/app/discovery-manifest.d.ts +2 -2
  48. package/dist/app/discovery-manifest.d.ts.map +1 -1
  49. package/dist/app/discovery-manifest.js +15 -3
  50. package/dist/app/header/header-brand.d.ts +25 -0
  51. package/dist/app/header/header-brand.d.ts.map +1 -0
  52. package/dist/app/header/header-brand.js +10 -0
  53. package/dist/app/header/prism-header.component.d.ts +2 -2
  54. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  55. package/dist/app/header/prism-header.component.js +73 -57
  56. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  57. package/dist/app/icons/icon-registry.js +4 -1
  58. package/dist/app/index.d.ts +12 -0
  59. package/dist/app/index.d.ts.map +1 -1
  60. package/dist/app/index.js +12 -1
  61. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
  62. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  63. package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
  64. package/dist/app/overview/open-in-playground.d.ts +19 -0
  65. package/dist/app/overview/open-in-playground.d.ts.map +1 -0
  66. package/dist/app/overview/open-in-playground.js +25 -0
  67. package/dist/app/overview/overview-matrix.d.ts +85 -0
  68. package/dist/app/overview/overview-matrix.d.ts.map +1 -0
  69. package/dist/app/overview/overview-matrix.js +98 -0
  70. package/dist/app/overview/overview-visibility.d.ts +10 -2
  71. package/dist/app/overview/overview-visibility.d.ts.map +1 -1
  72. package/dist/app/overview/overview-visibility.js +14 -3
  73. package/dist/app/overview/prism-overview-cell.component.d.ts +27 -2
  74. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  75. package/dist/app/overview/prism-overview-cell.component.js +145 -28
  76. package/dist/app/overview/prism-overview-matrix.component.d.ts +29 -0
  77. package/dist/app/overview/prism-overview-matrix.component.d.ts.map +1 -0
  78. package/dist/app/overview/prism-overview-matrix.component.js +155 -0
  79. package/dist/app/overview/prism-overview.component.d.ts +4 -0
  80. package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
  81. package/dist/app/overview/prism-overview.component.js +37 -14
  82. package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
  83. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
  84. package/dist/app/panels/a11y/a11y-core.plugin.js +0 -1
  85. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
  86. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
  88. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
  89. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
  90. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  91. package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
  92. package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
  93. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  94. package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
  95. package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
  96. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  97. package/dist/app/panels/a11y/a11y-score.component.js +19 -35
  98. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
  99. package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
  100. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  101. package/dist/app/panels/a11y/a11y-summary.js +8 -1
  102. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  103. package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
  104. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  105. package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
  106. package/dist/app/panels/a11y/severity.d.ts +9 -0
  107. package/dist/app/panels/a11y/severity.d.ts.map +1 -0
  108. package/dist/app/panels/a11y/severity.js +12 -0
  109. package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -1
  110. package/dist/app/panels/controls/controls-plugin.js +1 -2
  111. package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
  112. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  113. package/dist/app/panels/controls/non-editable-input-types.js +18 -0
  114. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
  115. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  116. package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
  117. package/dist/app/panels/events/events-plugin.d.ts.map +1 -1
  118. package/dist/app/panels/events/events-plugin.js +1 -2
  119. package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
  120. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  121. package/dist/app/panels/events/prism-events-panel.component.js +20 -7
  122. package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
  123. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  124. package/dist/app/panels/events/prism-json-node.utils.js +8 -0
  125. package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
  126. package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
  127. package/dist/app/panels/panel-host/addon-panels.js +12 -0
  128. package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
  129. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  130. package/dist/app/panels/panel-host/panel-badge.js +56 -11
  131. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
  132. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  133. package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
  134. package/dist/app/pseudo/pseudo-state-marker.d.ts +32 -10
  135. package/dist/app/pseudo/pseudo-state-marker.d.ts.map +1 -1
  136. package/dist/app/pseudo/pseudo-state-marker.js +83 -67
  137. package/dist/app/pseudo/pseudo-targets.d.ts +11 -0
  138. package/dist/app/pseudo/pseudo-targets.d.ts.map +1 -0
  139. package/dist/app/pseudo/pseudo-targets.js +46 -0
  140. package/dist/app/pseudo/state-fit.d.ts +28 -0
  141. package/dist/app/pseudo/state-fit.d.ts.map +1 -0
  142. package/dist/app/pseudo/state-fit.js +97 -0
  143. package/dist/app/renderer/composition.d.ts +20 -0
  144. package/dist/app/renderer/composition.d.ts.map +1 -0
  145. package/dist/app/renderer/composition.js +26 -0
  146. package/dist/app/renderer/input-bindings.d.ts +28 -0
  147. package/dist/app/renderer/input-bindings.d.ts.map +1 -0
  148. package/dist/app/renderer/input-bindings.js +42 -0
  149. package/dist/app/renderer/known-inputs.d.ts +8 -1
  150. package/dist/app/renderer/known-inputs.d.ts.map +1 -1
  151. package/dist/app/renderer/known-inputs.js +13 -5
  152. package/dist/app/renderer/prism-renderer.component.d.ts +18 -4
  153. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  154. package/dist/app/renderer/prism-renderer.component.js +78 -44
  155. package/dist/app/renderer/projectable-content.d.ts +8 -1
  156. package/dist/app/renderer/projectable-content.d.ts.map +1 -1
  157. package/dist/app/renderer/projectable-content.js +40 -29
  158. package/dist/app/renderer/rendered-key.d.ts +20 -6
  159. package/dist/app/renderer/rendered-key.d.ts.map +1 -1
  160. package/dist/app/renderer/rendered-key.js +25 -8
  161. package/dist/app/renderer/snippet-generator.d.ts +14 -2
  162. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  163. package/dist/app/renderer/snippet-generator.js +138 -81
  164. package/dist/app/services/navigation-item.d.ts +10 -0
  165. package/dist/app/services/navigation-item.d.ts.map +1 -0
  166. package/dist/app/services/navigation-item.js +20 -0
  167. package/dist/app/services/navigation-item.types.d.ts +8 -0
  168. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  169. package/dist/app/services/prism-layout.service.d.ts +12 -0
  170. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  171. package/dist/app/services/prism-layout.service.js +17 -7
  172. package/dist/app/services/prism-manifest.service.d.ts +4 -0
  173. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  174. package/dist/app/services/prism-manifest.service.js +4 -0
  175. package/dist/app/services/prism-navigation.service.d.ts +12 -0
  176. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  177. package/dist/app/services/prism-navigation.service.js +85 -19
  178. package/dist/app/services/prism-panel.service.d.ts +7 -3
  179. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  180. package/dist/app/services/prism-panel.service.js +13 -4
  181. package/dist/app/services/prism-pseudo-state.service.d.ts +59 -14
  182. package/dist/app/services/prism-pseudo-state.service.d.ts.map +1 -1
  183. package/dist/app/services/prism-pseudo-state.service.js +86 -29
  184. package/dist/app/services/prism-renderer.service.d.ts +23 -0
  185. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  186. package/dist/app/services/prism-renderer.service.js +77 -8
  187. package/dist/app/services/prism-search.service.d.ts +4 -0
  188. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  189. package/dist/app/services/prism-search.service.js +29 -6
  190. package/dist/app/services/prism-theme.service.d.ts +11 -3
  191. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  192. package/dist/app/services/prism-theme.service.js +27 -19
  193. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  194. package/dist/app/services/prism-url-state.service.js +81 -12
  195. package/dist/app/shared/badge.types.d.ts +7 -0
  196. package/dist/app/shared/badge.types.d.ts.map +1 -0
  197. package/dist/app/shared/badge.types.js +9 -0
  198. package/dist/app/shared/brand-mark.d.ts +35 -0
  199. package/dist/app/shared/brand-mark.d.ts.map +1 -0
  200. package/dist/app/shared/brand-mark.js +52 -0
  201. package/dist/app/shared/metric-bar.d.ts +6 -0
  202. package/dist/app/shared/metric-bar.d.ts.map +1 -0
  203. package/dist/app/shared/metric-bar.js +7 -0
  204. package/dist/app/shared/prism-badge.component.d.ts +21 -0
  205. package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
  206. package/dist/app/shared/prism-badge.component.js +68 -0
  207. package/dist/app/shared/prism-button.component.d.ts +12 -0
  208. package/dist/app/shared/prism-button.component.d.ts.map +1 -0
  209. package/dist/app/shared/prism-button.component.js +28 -0
  210. package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
  211. package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
  212. package/dist/app/shared/prism-icon-button.component.js +37 -0
  213. package/dist/app/shared/prism-list-row.component.d.ts +17 -0
  214. package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
  215. package/dist/app/shared/prism-list-row.component.js +57 -0
  216. package/dist/app/shared/prism-logo.component.d.ts +24 -0
  217. package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
  218. package/dist/app/shared/prism-logo.component.js +77 -0
  219. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
  220. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  221. package/dist/app/shared/prism-metric-badge.component.js +33 -12
  222. package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
  223. package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
  224. package/dist/app/shared/prism-metric-card.component.js +111 -0
  225. package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
  226. package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
  227. package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
  228. package/dist/app/shared/prism-segmented.component.d.ts +25 -0
  229. package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
  230. package/dist/app/shared/prism-segmented.component.js +77 -0
  231. package/dist/app/shared/prism-tabs.component.d.ts +44 -0
  232. package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
  233. package/dist/app/shared/prism-tabs.component.js +134 -0
  234. package/dist/app/shared/roving-focus.d.ts +13 -0
  235. package/dist/app/shared/roving-focus.d.ts.map +1 -0
  236. package/dist/app/shared/roving-focus.js +34 -0
  237. package/dist/app/shell/prism-shell.component.d.ts +13 -0
  238. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  239. package/dist/app/shell/prism-shell.component.js +57 -28
  240. package/dist/app/shell/should-select-first.d.ts +17 -0
  241. package/dist/app/shell/should-select-first.d.ts.map +1 -0
  242. package/dist/app/shell/should-select-first.js +13 -0
  243. package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
  244. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  245. package/dist/app/sidebar/navigation-decorations.js +33 -2
  246. package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
  247. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  248. package/dist/app/sidebar/prism-sidebar.component.js +89 -77
  249. package/dist/app/theme/deprecated-tokens.d.ts +15 -0
  250. package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
  251. package/dist/app/theme/deprecated-tokens.js +22 -0
  252. package/dist/app/theme/favicon.d.ts +3 -0
  253. package/dist/app/theme/favicon.d.ts.map +1 -0
  254. package/dist/app/theme/favicon.js +3 -0
  255. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  256. package/dist/app/theme/prism-default-theme.js +122 -66
  257. package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
  258. package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
  259. package/dist/app/theme/resolve-theme-tokens.js +43 -0
  260. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
  261. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  262. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
  263. package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
  264. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  265. package/dist/app/view-tab-bar/next-view-id.js +9 -1
  266. package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
  267. package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
  268. package/dist/app/view-tab-bar/panel-inputs.js +41 -0
  269. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
  270. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  271. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
  272. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
  273. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  274. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
  275. package/dist/builder/config-loader/deprecated-options.d.ts +9 -0
  276. package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -0
  277. package/dist/builder/config-loader/deprecated-options.js +34 -0
  278. package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
  279. package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
  280. package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
  281. package/dist/builder/manifest/host-parser.d.ts +2 -0
  282. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  283. package/dist/builder/manifest/host-parser.js +9 -4
  284. package/dist/builder/manifest/manifest-imports.d.ts +34 -0
  285. package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
  286. package/dist/builder/manifest/manifest-imports.js +91 -0
  287. package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
  288. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  289. package/dist/builder/manifest/runtime-manifest.generator.js +137 -65
  290. package/dist/builder/manifest/selector-element.d.ts +16 -0
  291. package/dist/builder/manifest/selector-element.d.ts.map +1 -0
  292. package/dist/builder/manifest/selector-element.js +46 -0
  293. package/dist/builder/manifest/template-literal.d.ts +3 -0
  294. package/dist/builder/manifest/template-literal.d.ts.map +1 -0
  295. package/dist/builder/manifest/template-literal.js +4 -0
  296. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  297. package/dist/builder/plugin-runner/plugin-runner.js +29 -26
  298. package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
  299. package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
  300. package/dist/builder/scanner/api/angular-decorators.js +157 -0
  301. package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
  302. package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
  303. package/dist/builder/scanner/api/component-api.extractor.js +104 -0
  304. package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
  305. package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
  306. package/dist/builder/scanner/api/doc-tags.js +101 -0
  307. package/dist/builder/scanner/api/export-index.d.ts +18 -0
  308. package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
  309. package/dist/builder/scanner/api/export-index.js +22 -0
  310. package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
  311. package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
  312. package/dist/builder/scanner/api/member.extractor.js +270 -0
  313. package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
  314. package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
  315. package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
  316. package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
  317. package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
  318. package/dist/builder/scanner/api/service-api.extractor.js +119 -0
  319. package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
  320. package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
  321. package/dist/builder/scanner/api/setup.reader.js +89 -0
  322. package/dist/builder/scanner/api/type-collector.d.ts +24 -0
  323. package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
  324. package/dist/builder/scanner/api/type-collector.js +211 -0
  325. package/dist/builder/scanner/ast-utils.d.ts +8 -0
  326. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  327. package/dist/builder/scanner/ast-utils.js +37 -1
  328. package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
  329. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
  330. package/dist/builder/scanner/class-hierarchy.js +12 -6
  331. package/dist/builder/scanner/component.scanner.d.ts +60 -6
  332. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  333. package/dist/builder/scanner/component.scanner.js +229 -58
  334. package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
  335. package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
  336. package/dist/builder/scanner/composition/compose-template.js +187 -0
  337. package/dist/builder/scanner/composition/declarables.d.ts +54 -0
  338. package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
  339. package/dist/builder/scanner/composition/declarables.js +182 -0
  340. package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
  341. package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
  342. package/dist/builder/scanner/composition/match-declarables.js +131 -0
  343. package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
  344. package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
  345. package/dist/builder/scanner/composition/read-composition.js +302 -0
  346. package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
  347. package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
  348. package/dist/builder/scanner/composition/template-elements.js +41 -0
  349. package/dist/builder/scanner/entry-point-discovery.d.ts +5 -0
  350. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
  351. package/dist/builder/scanner/entry-point-discovery.js +14 -0
  352. package/dist/builder/scanner/entry-point.scanner.d.ts +3 -1
  353. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
  354. package/dist/builder/scanner/entry-point.scanner.js +7 -6
  355. package/dist/builder/scanner/index.d.ts +4 -0
  356. package/dist/builder/scanner/index.d.ts.map +1 -1
  357. package/dist/builder/scanner/index.js +2 -0
  358. package/dist/builder/scanner/input.extractor.d.ts +31 -2
  359. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  360. package/dist/builder/scanner/input.extractor.js +73 -17
  361. package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
  362. package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
  363. package/dist/builder/scanner/pipe.scanner.js +65 -0
  364. package/dist/builder/scanner/pseudo-states.d.ts +1 -0
  365. package/dist/builder/scanner/pseudo-states.d.ts.map +1 -1
  366. package/dist/builder/scanner/pseudo-states.js +1 -1
  367. package/dist/builder/scanner/scanner.d.ts +27 -3
  368. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  369. package/dist/builder/scanner/scanner.js +68 -24
  370. package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
  371. package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
  372. package/dist/builder/scanner/service/angular-decorators.js +154 -0
  373. package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
  374. package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
  375. package/dist/builder/scanner/service/doc-tags.js +97 -0
  376. package/dist/builder/scanner/service/export-index.d.ts +18 -0
  377. package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
  378. package/dist/builder/scanner/service/export-index.js +22 -0
  379. package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
  380. package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
  381. package/dist/builder/scanner/service/member.extractor.js +216 -0
  382. package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
  383. package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
  384. package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
  385. package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
  386. package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
  387. package/dist/builder/scanner/service/service-api.extractor.js +119 -0
  388. package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
  389. package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
  390. package/dist/builder/scanner/service/setup.reader.js +89 -0
  391. package/dist/builder/scanner/service/type-collector.d.ts +23 -0
  392. package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
  393. package/dist/builder/scanner/service/type-collector.js +210 -0
  394. package/dist/builder/scanner/service.scanner.d.ts +26 -0
  395. package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
  396. package/dist/builder/scanner/service.scanner.js +61 -0
  397. package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
  398. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
  399. package/dist/builder/scanner/showcase-diagnostics.js +123 -10
  400. package/dist/builder/scanner/showcase-states.d.ts +17 -0
  401. package/dist/builder/scanner/showcase-states.d.ts.map +1 -0
  402. package/dist/builder/scanner/showcase-states.js +58 -0
  403. package/dist/builder/scanner/source-file-cache.d.ts +26 -0
  404. package/dist/builder/scanner/source-file-cache.d.ts.map +1 -0
  405. package/dist/builder/scanner/source-file-cache.js +60 -0
  406. package/dist/builder/shared/prism-pipeline.d.ts +6 -0
  407. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  408. package/dist/builder/shared/prism-pipeline.js +71 -18
  409. package/dist/decorator/index.d.ts +1 -1
  410. package/dist/decorator/index.d.ts.map +1 -1
  411. package/dist/decorator/showcase.types.d.ts +102 -9
  412. package/dist/decorator/showcase.types.d.ts.map +1 -1
  413. package/dist/plugin/index.d.ts +6 -1
  414. package/dist/plugin/index.d.ts.map +1 -1
  415. package/dist/plugin/index.js +4 -0
  416. package/dist/plugin/pipe.types.d.ts +36 -0
  417. package/dist/plugin/pipe.types.d.ts.map +1 -0
  418. package/dist/plugin/pipe.types.js +1 -0
  419. package/dist/plugin/plugin.types.d.ts +184 -8
  420. package/dist/plugin/plugin.types.d.ts.map +1 -1
  421. package/dist/plugin/service.types.d.ts +124 -0
  422. package/dist/plugin/service.types.d.ts.map +1 -0
  423. package/dist/plugin/service.types.js +1 -0
  424. package/dist/plugin/status.d.ts +27 -0
  425. package/dist/plugin/status.d.ts.map +1 -0
  426. package/dist/plugin/status.js +26 -0
  427. package/dist/shared/composition.d.ts +30 -0
  428. package/dist/shared/composition.d.ts.map +1 -0
  429. package/dist/shared/composition.js +29 -0
  430. package/dist/shared/pseudo-state.type.d.ts +2 -1
  431. package/dist/shared/pseudo-state.type.d.ts.map +1 -1
  432. package/dist/shared/void-elements.d.ts +3 -0
  433. package/dist/shared/void-elements.d.ts.map +1 -0
  434. package/dist/shared/void-elements.js +2 -0
  435. package/package.json +1 -1
  436. package/src/builder/build/schema.json +6 -6
  437. package/src/builder/serve/schema.json +6 -6
@@ -0,0 +1,211 @@
1
+ import ts from 'typescript';
2
+ import { isInternal, readDescription, readDocTags } from './doc-tags.js';
3
+ import { collapseWhitespace, extractMembers, extractObjectTypeMembers, readTypeText } from './member.extractor.js';
4
+ /**
5
+ * Collects the types the API of a service, pipe or component reaches. A type
6
+ * is documented when it is an interface, class, type alias or enum, a scanned
7
+ * entry point exports it, and it is not tagged `@internal`. Anything else,
8
+ * `Signal` or `Provider` or a type the library keeps to itself, stays text
9
+ * without a link.
10
+ *
11
+ * Each type is documented once, under the id it got when it was first
12
+ * reached: its name, or `${name}@${importPath}` when a type of that name was
13
+ * reached before. That also ends a type that refers to itself.
14
+ */
15
+ export function createTypeCollector(checker, exportIndex) {
16
+ /** Every symbol met so far: what it was reached as, or `null` when it is not documented. */
17
+ const reached = new Map();
18
+ const ids = new Set();
19
+ const queue = [];
20
+ const docs = [];
21
+ function collect(typeNode, type, reachedFrom, path) {
22
+ const links = [];
23
+ const visit = (symbol) => {
24
+ const target = reach(symbol, reachedFrom, path);
25
+ if (target && !links.includes(target.id))
26
+ links.push(target.id);
27
+ };
28
+ if (typeNode)
29
+ forEachReferenceInNode(typeNode, checker, visit);
30
+ else
31
+ forEachReferenceInType(type, checker, visit, new Set());
32
+ const text = readTypeText(checker, typeNode, type);
33
+ return links.length > 0 ? { text, links } : { text };
34
+ }
35
+ function reach(symbol, reachedFrom, path) {
36
+ const target = resolveSymbol(symbol, checker);
37
+ const known = reached.get(target);
38
+ if (known !== undefined)
39
+ return known ?? undefined;
40
+ const declaration = target.declarations?.find(isDocumentedKind);
41
+ const importPath = exportIndex.get(target);
42
+ if (!declaration || importPath === undefined || isInternal(declaration)) {
43
+ reached.set(target, null);
44
+ return undefined;
45
+ }
46
+ const id = ids.has(target.name) ? `${target.name}@${importPath}` : target.name;
47
+ const entry = { id, symbol: target, declaration, importPath, reachedFrom, path: path ?? target.name };
48
+ ids.add(id);
49
+ reached.set(target, entry);
50
+ queue.push(entry);
51
+ return entry;
52
+ }
53
+ function within(owner) {
54
+ return {
55
+ ref(typeNode, type, reachedFrom, site) {
56
+ switch (site?.kind) {
57
+ case 'property':
58
+ return collect(typeNode, type, `via ${owner}.${site.name}`, `${owner}.${site.name}`);
59
+ case 'parameter':
60
+ return collect(typeNode, type, `parameter of ${owner}.${site.method}()`, site.name);
61
+ case 'return':
62
+ return collect(typeNode, type, `returned by ${owner}.${site.method}()`, `${owner}.${site.method}()`);
63
+ default:
64
+ return collect(typeNode, type, `via ${owner}`, owner);
65
+ }
66
+ }
67
+ };
68
+ }
69
+ function describe({ id, symbol, declaration, importPath, reachedFrom, path }) {
70
+ const doc = { id, name: symbol.name, kind: kindOf(declaration), importPath, tags: readDocTags(declaration) };
71
+ const description = readDescription(declaration);
72
+ const members = within(path);
73
+ if (description)
74
+ doc.description = description;
75
+ if (ts.isClassDeclaration(declaration)) {
76
+ assignMembers(doc, extractMembers(declaration, checker, members));
77
+ }
78
+ else if (ts.isInterfaceDeclaration(declaration)) {
79
+ assignMembers(doc, extractObjectTypeMembers(checker.getDeclaredTypeOfSymbol(symbol), checker, members));
80
+ }
81
+ else if (ts.isEnumDeclaration(declaration)) {
82
+ doc.members = declaration.members.filter((member) => !isInternal(member)).map((member) => describeEnumMember(member, checker));
83
+ }
84
+ else if (isLiteralUnion(declaration.type)) {
85
+ doc.union = declaration.type.types.map((member) => member.getText());
86
+ }
87
+ else if (ts.isTypeLiteralNode(declaration.type)) {
88
+ assignMembers(doc, extractObjectTypeMembers(checker.getDeclaredTypeOfSymbol(symbol), checker, members));
89
+ }
90
+ else {
91
+ // The text has no links of its own, but the types it names are reached all the same.
92
+ doc.text = collect(declaration.type, checker.getDeclaredTypeOfSymbol(symbol), `via ${path}`, path).text;
93
+ }
94
+ doc.reachedFrom = reachedFrom;
95
+ return doc;
96
+ }
97
+ return {
98
+ ref: (typeNode, type, reachedFrom, site) => collect(typeNode, type, reachedFrom, site && pathOf(site)),
99
+ within,
100
+ drain() {
101
+ // Describing a type reaches the types of its members, which join the queue behind it.
102
+ while (docs.length < queue.length)
103
+ docs.push(describe(queue[docs.length]));
104
+ return [...docs];
105
+ }
106
+ };
107
+ }
108
+ /** The value a type at the top level is the type of: a property, a parameter by its name, or `show()` for a return value. */
109
+ function pathOf(site) {
110
+ return site.kind === 'return' ? `${site.method}()` : site.name;
111
+ }
112
+ /**
113
+ * The declaration a reference ends at: an import followed to its source, the
114
+ * export symbol of a declaration exported from its own file, an enum for one
115
+ * of its members. That is the symbol the export index holds.
116
+ */
117
+ function resolveSymbol(symbol, checker) {
118
+ let target = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
119
+ if (target.flags & ts.SymbolFlags.EnumMember && target.valueDeclaration && ts.isEnumDeclaration(target.valueDeclaration.parent)) {
120
+ target = checker.getSymbolAtLocation(target.valueDeclaration.parent.name) ?? target;
121
+ }
122
+ return checker.getExportSymbolOfSymbol(target);
123
+ }
124
+ function isDocumentedKind(declaration) {
125
+ return ts.isInterfaceDeclaration(declaration) || ts.isClassDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration) || ts.isEnumDeclaration(declaration);
126
+ }
127
+ function kindOf(declaration) {
128
+ if (ts.isInterfaceDeclaration(declaration))
129
+ return 'interface';
130
+ if (ts.isClassDeclaration(declaration))
131
+ return 'class';
132
+ if (ts.isEnumDeclaration(declaration))
133
+ return 'enum';
134
+ return 'type';
135
+ }
136
+ /** `'top-left' | 'top-right'`, `1 | 2` or `true | null`: a union of literals only. */
137
+ function isLiteralUnion(node) {
138
+ return ts.isUnionTypeNode(node) && node.types.every(ts.isLiteralTypeNode);
139
+ }
140
+ function assignMembers(doc, { properties, methods }) {
141
+ if (properties.length > 0)
142
+ doc.properties = properties;
143
+ if (methods.length > 0)
144
+ doc.methods = methods;
145
+ }
146
+ /** The initializer as written, or the value TypeScript counts up to without one. */
147
+ function describeEnumMember(member, checker) {
148
+ const result = {
149
+ name: ts.isIdentifier(member.name) || ts.isStringLiteral(member.name) ? member.name.text : member.name.getText()
150
+ };
151
+ const value = member.initializer ? collapseWhitespace(member.initializer.getText()) : checker.getConstantValue(member)?.toString();
152
+ const description = readDescription(member);
153
+ if (value !== undefined)
154
+ result.value = value;
155
+ if (description)
156
+ result.description = description;
157
+ return result;
158
+ }
159
+ /** Every type reference in an annotation: in type arguments, arrays, unions and object literal types too. */
160
+ function forEachReferenceInNode(node, checker, visit) {
161
+ if (ts.isTypeReferenceNode(node)) {
162
+ const symbol = checker.getSymbolAtLocation(ts.isQualifiedName(node.typeName) ? node.typeName.right : node.typeName);
163
+ if (symbol)
164
+ visit(symbol);
165
+ }
166
+ ts.forEachChild(node, (child) => forEachReferenceInNode(child, checker, visit));
167
+ }
168
+ /**
169
+ * Every named type in a type without annotation, as `typeToString` prints it:
170
+ * an alias or a class or interface with their type arguments, the parts of a
171
+ * union or intersection, and the members of an object literal or function type.
172
+ */
173
+ function forEachReferenceInType(type, checker, visit, seen) {
174
+ if (seen.has(type))
175
+ return;
176
+ seen.add(type);
177
+ const walk = (inner) => forEachReferenceInType(inner, checker, visit, seen);
178
+ if (type.aliasSymbol) {
179
+ visit(type.aliasSymbol);
180
+ type.aliasTypeArguments?.forEach(walk);
181
+ return;
182
+ }
183
+ // An enum, or one of its members.
184
+ if (type.flags & ts.TypeFlags.EnumLiteral && type.symbol) {
185
+ visit(type.symbol);
186
+ return;
187
+ }
188
+ if (type.isUnionOrIntersection()) {
189
+ type.types.forEach(walk);
190
+ return;
191
+ }
192
+ if (!(type.flags & ts.TypeFlags.Object))
193
+ return;
194
+ const { objectFlags } = type;
195
+ if (objectFlags & (ts.ObjectFlags.Class | ts.ObjectFlags.Interface | ts.ObjectFlags.Reference)) {
196
+ if (type.symbol)
197
+ visit(type.symbol);
198
+ if (objectFlags & ts.ObjectFlags.Reference)
199
+ checker.getTypeArguments(type).forEach(walk);
200
+ return;
201
+ }
202
+ if (objectFlags & ts.ObjectFlags.Anonymous) {
203
+ for (const property of type.getProperties())
204
+ walk(checker.getTypeOfSymbol(property));
205
+ for (const signature of type.getCallSignatures()) {
206
+ for (const parameter of signature.getParameters())
207
+ walk(checker.getTypeOfSymbol(parameter));
208
+ walk(signature.getReturnType());
209
+ }
210
+ }
211
+ }
@@ -57,6 +57,14 @@ export declare function findDecorator(node: ts.ClassDeclaration | ts.PropertyDec
57
57
  * Returns undefined if the decorator is not a call or has no arguments.
58
58
  */
59
59
  export declare function getDecoratorArgument(decorator: ts.Decorator): ts.Expression | undefined;
60
+ /**
61
+ * One field of `@Component`/`@Directive`/`@Pipe` metadata, read from its own
62
+ * property where the literal has one, so that `imports`, `providers` and the
63
+ * rest are not resolved only to be thrown away. A spread or a shorthand could
64
+ * supply the field from elsewhere, so then the whole argument is evaluated.
65
+ * Without a `checker`, only what the literal itself says can be read.
66
+ */
67
+ export declare function readDecoratorField(arg: ts.Expression, key: string, checker?: ts.TypeChecker): unknown;
60
68
  /**
61
69
  * Get the JSDoc comment for a node.
62
70
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/ast-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,MAAuC,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAE5D,sFAAsF;AACtF,MAAM,WAAW,mBAAmB;IAChC,kFAAkF;IAClF,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,eAAe,CAAC;CAChE;AAED,MAAM,WAAW,gBAAgB;IAC7B,sGAAsG;IACtG,IAAI,EAAE,cAAc,CAAC;IACrB,sEAAsE;IACtE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,2GAA2G;IAC3G,MAAM,EAAE,aAAa,GAAG,eAAe,CAAC;IACxC,qFAAqF;IACrF,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,oEAAoE;IACpE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,gGAAgG;IAChG,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;CAC5B;AAmCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAIzF;AAoYD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,SAAS,GAAG,SAAS,CAgBxH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAOvF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAQ1F"}
1
+ {"version":3,"file":"ast-utils.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/ast-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,MAAuC,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAE5D,sFAAsF;AACtF,MAAM,WAAW,mBAAmB;IAChC,kFAAkF;IAClF,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,eAAe,CAAC;CAChE;AAED,MAAM,WAAW,gBAAgB;IAC7B,sGAAsG;IACtG,IAAI,EAAE,cAAc,CAAC;IACrB,sEAAsE;IACtE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,2GAA2G;IAC3G,MAAM,EAAE,aAAa,GAAG,eAAe,CAAC;IACxC,qFAAqF;IACrF,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,oEAAoE;IACpE,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,gGAAgG;IAChG,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;CAC5B;AAmCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAIzF;AAoYD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,SAAS,GAAG,SAAS,CAgBxH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAOvF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAWrG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAQ1F"}
@@ -388,6 +388,24 @@ export function getDecoratorArgument(decorator) {
388
388
  }
389
389
  return undefined;
390
390
  }
391
+ /**
392
+ * One field of `@Component`/`@Directive`/`@Pipe` metadata, read from its own
393
+ * property where the literal has one, so that `imports`, `providers` and the
394
+ * rest are not resolved only to be thrown away. A spread or a shorthand could
395
+ * supply the field from elsewhere, so then the whole argument is evaluated.
396
+ * Without a `checker`, only what the literal itself says can be read.
397
+ */
398
+ export function readDecoratorField(arg, key, checker) {
399
+ if (ts.isObjectLiteralExpression(arg) && !arg.properties.some(ts.isSpreadAssignment)) {
400
+ const prop = arg.properties.find((p) => p.name !== undefined && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) && p.name.text === key);
401
+ if (!prop)
402
+ return undefined;
403
+ if (ts.isPropertyAssignment(prop))
404
+ return evaluateExpression(prop.initializer, checker);
405
+ }
406
+ const raw = evaluateExpression(arg, checker);
407
+ return typeof raw === 'object' && raw !== null ? raw[key] : undefined;
408
+ }
391
409
  /**
392
410
  * Get the JSDoc comment for a node.
393
411
  */
@@ -395,6 +413,24 @@ export function getJsDocComment(node, checker) {
395
413
  const symbol = checker.getSymbolAtLocation(ts.isClassDeclaration(node) || ts.isPropertyDeclaration(node) ? (node.name ?? node) : node);
396
414
  if (!symbol)
397
415
  return undefined;
398
- const doc = ts.displayPartsToString(symbol.getDocumentationComment(checker)).trim();
416
+ const doc = joinDocParts(symbol.getDocumentationComment(checker)).trim();
399
417
  return doc || undefined;
400
418
  }
419
+ /**
420
+ * Joins the parts of a comment like `ts.displayPartsToString`, except that a
421
+ * link keeps the separator between its target and its text. TypeScript drops
422
+ * it, and `{@link Item | the item}` would read `{@link Itemthe item}`. It only
423
+ * splits a link into a `linkName` and a `linkText` when the target resolves to a
424
+ * symbol. Any other target comes as one `linkText` that still ends in the blank
425
+ * before the closing brace, which is trimmed here.
426
+ */
427
+ function joinDocParts(parts) {
428
+ return parts
429
+ .map((part, index) => {
430
+ if (part.kind !== 'linkText')
431
+ return part.text;
432
+ const text = parts[index + 1]?.kind === 'link' ? part.text.trimEnd() : part.text;
433
+ return parts[index - 1]?.kind === 'linkName' ? ` | ${text}` : text;
434
+ })
435
+ .join('');
436
+ }
@@ -25,9 +25,11 @@ export interface ClassHierarchy {
25
25
  unreadable: UnreadableBase[];
26
26
  }
27
27
  /**
28
- * Follow `extends` from a class up to the root of its hierarchy. A mixin
29
- * (`extends withX(Base)`) ends the walk: what the call returns has no class
30
- * declaration to read members from.
28
+ * The class, then each base class it extends, nearest first, the ones that
29
+ * only exist as a declaration included. A mixin (`extends withX(Base)`) ends
30
+ * the chain: what the call returns has no class declaration to read members from.
31
31
  */
32
+ export declare function getClassChain(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker): ts.ClassDeclaration[];
33
+ /** The classes of {@link getClassChain} that have source, and the declaration-only ones among them that declare inputs. */
32
34
  export declare function getClassHierarchy(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker): ClassHierarchy;
33
35
  //# sourceMappingURL=class-hierarchy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/class-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAS5B,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,yEAAyE;IACzE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc,CAmBzG"}
1
+ {"version":3,"file":"class-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/class-hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAS5B,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,yEAAyE;IACzE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAQ5G;AAED,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc,CAgBzG"}
@@ -5,16 +5,22 @@ const INPUT_SIGNAL_TYPES = new Set(['InputSignal', 'InputSignalWithTransform', '
5
5
  /** The static fields the Angular compiler writes a class's directive definition into. */
6
6
  const DEFINITION_FIELDS = new Set(['ɵdir', 'ɵcmp']);
7
7
  /**
8
- * Follow `extends` from a class up to the root of its hierarchy. A mixin
9
- * (`extends withX(Base)`) ends the walk: what the call returns has no class
10
- * declaration to read members from.
8
+ * The class, then each base class it extends, nearest first, the ones that
9
+ * only exist as a declaration included. A mixin (`extends withX(Base)`) ends
10
+ * the chain: what the call returns has no class declaration to read members from.
11
11
  */
12
+ export function getClassChain(classDecl, checker) {
13
+ const chain = [];
14
+ for (let current = classDecl; current && !chain.includes(current); current = getBaseClass(current, checker)) {
15
+ chain.push(current);
16
+ }
17
+ return chain;
18
+ }
19
+ /** The classes of {@link getClassChain} that have source, and the declaration-only ones among them that declare inputs. */
12
20
  export function getClassHierarchy(classDecl, checker) {
13
21
  const classes = [];
14
22
  const unreadable = [];
15
- const visited = new Set();
16
- for (let current = classDecl; current && !visited.has(current); current = getBaseClass(current, checker)) {
17
- visited.add(current);
23
+ for (const current of getClassChain(classDecl, checker)) {
18
24
  if (!isDeclarationOnly(current)) {
19
25
  classes.push({ classDecl: current, definesMetadata: current === classDecl || isAngularClass(current) });
20
26
  continue;
@@ -1,13 +1,67 @@
1
1
  import ts from 'typescript';
2
+ import type { ShowcaseConfig } from '../../decorator/showcase.types.js';
2
3
  import type { ScannedComponent } from '../../plugin/plugin.types.js';
4
+ import { type ShowcaseClassKind } from './api/angular-decorators.js';
5
+ import type { ExportIndex } from './api/export-index.js';
6
+ import { type CompositionContext } from './composition/read-composition.js';
7
+ type Report = (message: string) => void;
3
8
  /**
4
- * Scan exported symbols for Angular components annotated with @Showcase.
9
+ * The two ways a scan warns, each printing a message once however often it is
10
+ * raised: `report` for a dropped value, which is also collected in
11
+ * `diagnostics` and fails the build under `strictShowcase`, and `notify` for
12
+ * anything else worth saying.
13
+ */
14
+ export declare function createReporters(diagnostics: string[], notices: Set<string>): {
15
+ report: Report;
16
+ notify: Report;
17
+ };
18
+ export interface ScanComponentsOptions {
19
+ /**
20
+ * Shared across entry points, and with {@link scanServices} and {@link scanPipes}, so that a class exported from
21
+ * several of them does not repeat its warnings.
22
+ */
23
+ diagnostics?: string[];
24
+ notices?: Set<string>;
25
+ /**
26
+ * Tells the API of a component which of the types it names a consumer can import; without one the API has their
27
+ * text, but no links and no `types`.
28
+ */
29
+ exportIndex?: ExportIndex;
30
+ /** Whether to read {@link ScannedComponent.api}: only a plugin with `componentApi` reads it, so the build leaves it out without one. */
31
+ api?: boolean;
32
+ /** What {@link ScannedComponent.composition} is read against; without it, no composition is read. */
33
+ composition?: CompositionContext;
34
+ }
35
+ /**
36
+ * Read the Angular components among the showcased classes of an entry point.
37
+ * A class with `@Injectable` or `@Service` is a service and one with `@Pipe` a
38
+ * pipe, each left to its own scan, unless it declares fields only a component
39
+ * can use.
5
40
  *
6
41
  * Every @Showcase value the scan has to drop is printed and collected in
7
- * `diagnostics`, once: sharing the array across entry points keeps a
8
- * component exported from several of them from repeating its warnings.
9
- * `notices` does the same for warnings about what a component inherits,
10
- * which are not diagnostics.
42
+ * `diagnostics`, once. `notices` does the same for warnings about what a
43
+ * component inherits, which are not diagnostics.
44
+ */
45
+ export declare function scanComponents(showcased: ShowcasedClass[], checker: ts.TypeChecker, options?: ScanComponentsOptions): ScannedComponent[];
46
+ /** An exported class with `@Showcase`, and which scan it belongs to. */
47
+ export interface ShowcasedClass {
48
+ symbol: ts.Symbol;
49
+ classDecl: ts.ClassDeclaration;
50
+ decorator: ts.Decorator;
51
+ argument: ts.Expression | undefined;
52
+ kind: ShowcaseClassKind;
53
+ }
54
+ /**
55
+ * The classes with `@Showcase` among the exports of an entry point, each
56
+ * classified once: the component, the service and the pipe scan each keep
57
+ * the classes of their own kind.
58
+ */
59
+ export declare function findShowcasedClasses(exports: ts.Symbol[], checker: ts.TypeChecker): ShowcasedClass[];
60
+ /**
61
+ * `setup` is read for services and pipes only, so a component's is never
62
+ * part of the config: the issue the evaluator raises for its function is
63
+ * swallowed here, and {@link scanComponents} says what is wrong with it instead.
11
64
  */
12
- export declare function scanComponents(exports: ts.Symbol[], checker: ts.TypeChecker, diagnostics?: string[], notices?: Set<string>): ScannedComponent[];
65
+ export declare function extractShowcaseConfig(decorator: ts.Decorator, className: string, report: Report, checker: ts.TypeChecker): ShowcaseConfig | undefined;
66
+ export {};
13
67
  //# sourceMappingURL=component.scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/component.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAiDrE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,GAAE,MAAM,EAAO,EAAE,OAAO,cAAoB,GAAG,gBAAgB,EAAE,CAsEzJ"}
1
+ {"version":3,"file":"component.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/component.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAgD,cAAc,EAAkB,MAAM,mCAAmC,CAAC;AACtI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIrE,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAE5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,mCAAmC,CAAC;AA6E7F,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAa/G;AAED,MAAM,WAAW,qBAAqB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wIAAwI;IACxI,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,qGAAqG;IACrG,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,EAAE,CA+H5I;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;IAClB,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC;IACxB,QAAQ,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc,EAAE,CAMpG;AA2BD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,cAAc,GAAG,SAAS,CAErJ"}