@ng-prism/core 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/README.md +170 -0
  2. package/builders.json +14 -0
  3. package/dist/app/component-header/prism-component-header.component.d.ts +8 -0
  4. package/dist/app/component-header/prism-component-header.component.d.ts.map +1 -0
  5. package/dist/app/component-header/prism-component-header.component.js +77 -0
  6. package/dist/app/controls/boolean-control.component.d.ts +10 -0
  7. package/dist/app/controls/boolean-control.component.d.ts.map +1 -0
  8. package/dist/app/controls/boolean-control.component.js +58 -0
  9. package/dist/app/controls/json-control.component.d.ts +19 -0
  10. package/dist/app/controls/json-control.component.d.ts.map +1 -0
  11. package/dist/app/controls/json-control.component.js +136 -0
  12. package/dist/app/controls/number-control.component.d.ts +10 -0
  13. package/dist/app/controls/number-control.component.d.ts.map +1 -0
  14. package/dist/app/controls/number-control.component.js +55 -0
  15. package/dist/app/controls/string-control.component.d.ts +10 -0
  16. package/dist/app/controls/string-control.component.d.ts.map +1 -0
  17. package/dist/app/controls/string-control.component.js +55 -0
  18. package/dist/app/controls/union-control.component.d.ts +11 -0
  19. package/dist/app/controls/union-control.component.d.ts.map +1 -0
  20. package/dist/app/controls/union-control.component.js +72 -0
  21. package/dist/app/header/prism-header.component.d.ts +10 -0
  22. package/dist/app/header/prism-header.component.d.ts.map +1 -0
  23. package/dist/app/header/prism-header.component.js +241 -0
  24. package/dist/app/hmr.d.ts +4 -0
  25. package/dist/app/hmr.d.ts.map +1 -0
  26. package/dist/app/hmr.js +5 -0
  27. package/dist/app/index.d.ts +18 -0
  28. package/dist/app/index.d.ts.map +1 -0
  29. package/dist/app/index.js +21 -0
  30. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +10 -0
  31. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -0
  32. package/dist/app/layout-menu/prism-layout-menu.component.js +190 -0
  33. package/dist/app/page-renderer/prism-icon-page.component.d.ts +8 -0
  34. package/dist/app/page-renderer/prism-icon-page.component.d.ts.map +1 -0
  35. package/dist/app/page-renderer/prism-icon-page.component.js +42 -0
  36. package/dist/app/page-renderer/prism-page-renderer.component.d.ts +8 -0
  37. package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -0
  38. package/dist/app/page-renderer/prism-page-renderer.component.js +72 -0
  39. package/dist/app/page-renderer/prism-token-page.component.d.ts +8 -0
  40. package/dist/app/page-renderer/prism-token-page.component.d.ts.map +1 -0
  41. package/dist/app/page-renderer/prism-token-page.component.js +164 -0
  42. package/dist/app/panels/a11y/a11y-audit.service.d.ts +17 -0
  43. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -0
  44. package/dist/app/panels/a11y/a11y-audit.service.js +71 -0
  45. package/dist/app/panels/a11y/a11y-core.plugin.d.ts +3 -0
  46. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -0
  47. package/dist/app/panels/a11y/a11y-core.plugin.js +8 -0
  48. package/dist/app/panels/a11y/a11y-dom-utils.d.ts +11 -0
  49. package/dist/app/panels/a11y/a11y-dom-utils.d.ts.map +1 -0
  50. package/dist/app/panels/a11y/a11y-dom-utils.js +149 -0
  51. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts +24 -0
  52. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts.map +1 -0
  53. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +104 -0
  54. package/dist/app/panels/a11y/a11y-keyboard.component.d.ts +12 -0
  55. package/dist/app/panels/a11y/a11y-keyboard.component.d.ts.map +1 -0
  56. package/dist/app/panels/a11y/a11y-keyboard.component.js +150 -0
  57. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +8 -0
  58. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -0
  59. package/dist/app/panels/a11y/a11y-keyboard.service.js +71 -0
  60. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +6 -0
  61. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -0
  62. package/dist/app/panels/a11y/a11y-overlay-host.component.js +18 -0
  63. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +8 -0
  64. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -0
  65. package/dist/app/panels/a11y/a11y-panel-state.service.js +11 -0
  66. package/dist/app/panels/a11y/a11y-panel.component.d.ts +14 -0
  67. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -0
  68. package/dist/app/panels/a11y/a11y-panel.component.js +183 -0
  69. package/dist/app/panels/a11y/a11y-perspective.service.d.ts +8 -0
  70. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -0
  71. package/dist/app/panels/a11y/a11y-perspective.service.js +11 -0
  72. package/dist/app/panels/a11y/a11y-score.component.d.ts +11 -0
  73. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -0
  74. package/dist/app/panels/a11y/a11y-score.component.js +72 -0
  75. package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts +27 -0
  76. package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts.map +1 -0
  77. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +127 -0
  78. package/dist/app/panels/a11y/a11y-sr.component.d.ts +19 -0
  79. package/dist/app/panels/a11y/a11y-sr.component.d.ts.map +1 -0
  80. package/dist/app/panels/a11y/a11y-sr.component.js +257 -0
  81. package/dist/app/panels/a11y/a11y-sr.service.d.ts +8 -0
  82. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -0
  83. package/dist/app/panels/a11y/a11y-sr.service.js +102 -0
  84. package/dist/app/panels/a11y/a11y-tree.component.d.ts +27 -0
  85. package/dist/app/panels/a11y/a11y-tree.component.d.ts.map +1 -0
  86. package/dist/app/panels/a11y/a11y-tree.component.js +229 -0
  87. package/dist/app/panels/a11y/a11y-tree.service.d.ts +8 -0
  88. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -0
  89. package/dist/app/panels/a11y/a11y-tree.service.js +47 -0
  90. package/dist/app/panels/a11y/a11y-violations.component.d.ts +15 -0
  91. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -0
  92. package/dist/app/panels/a11y/a11y-violations.component.js +457 -0
  93. package/dist/app/panels/a11y/a11y.types.d.ts +44 -0
  94. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -0
  95. package/dist/app/panels/a11y/a11y.types.js +1 -0
  96. package/dist/app/panels/builtin-panels.d.ts +3 -0
  97. package/dist/app/panels/builtin-panels.d.ts.map +1 -0
  98. package/dist/app/panels/builtin-panels.js +8 -0
  99. package/dist/app/panels/controls/controls-plugin.d.ts +3 -0
  100. package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -0
  101. package/dist/app/panels/controls/controls-plugin.js +12 -0
  102. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +13 -0
  103. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -0
  104. package/dist/app/panels/controls/prism-controls-panel.component.js +178 -0
  105. package/dist/app/panels/events/events-plugin.d.ts +3 -0
  106. package/dist/app/panels/events/events-plugin.d.ts.map +1 -0
  107. package/dist/app/panels/events/events-plugin.js +12 -0
  108. package/dist/app/panels/events/prism-events-panel.component.d.ts +9 -0
  109. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -0
  110. package/dist/app/panels/events/prism-events-panel.component.js +83 -0
  111. package/dist/app/panels/events/prism-json-node.component.d.ts +22 -0
  112. package/dist/app/panels/events/prism-json-node.component.d.ts.map +1 -0
  113. package/dist/app/panels/events/prism-json-node.component.js +350 -0
  114. package/dist/app/panels/events/prism-json-node.utils.d.ts +2 -0
  115. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -0
  116. package/dist/app/panels/events/prism-json-node.utils.js +40 -0
  117. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +26 -0
  118. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -0
  119. package/dist/app/panels/panel-host/prism-panel-host.component.js +157 -0
  120. package/dist/app/provide-prism.d.ts +8 -0
  121. package/dist/app/provide-prism.d.ts.map +1 -0
  122. package/dist/app/provide-prism.js +21 -0
  123. package/dist/app/renderer/highlight-xml.d.ts +2 -0
  124. package/dist/app/renderer/highlight-xml.d.ts.map +1 -0
  125. package/dist/app/renderer/highlight-xml.js +27 -0
  126. package/dist/app/renderer/prism-renderer.component.d.ts +32 -0
  127. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -0
  128. package/dist/app/renderer/prism-renderer.component.js +346 -0
  129. package/dist/app/renderer/snippet-generator.d.ts +7 -0
  130. package/dist/app/renderer/snippet-generator.d.ts.map +1 -0
  131. package/dist/app/renderer/snippet-generator.js +162 -0
  132. package/dist/app/services/navigation-item.types.d.ts +10 -0
  133. package/dist/app/services/navigation-item.types.d.ts.map +1 -0
  134. package/dist/app/services/navigation-item.types.js +1 -0
  135. package/dist/app/services/prism-event-log.service.d.ts +16 -0
  136. package/dist/app/services/prism-event-log.service.d.ts.map +1 -0
  137. package/dist/app/services/prism-event-log.service.js +21 -0
  138. package/dist/app/services/prism-layout.service.d.ts +23 -0
  139. package/dist/app/services/prism-layout.service.d.ts.map +1 -0
  140. package/dist/app/services/prism-layout.service.js +85 -0
  141. package/dist/app/services/prism-manifest.service.d.ts +15 -0
  142. package/dist/app/services/prism-manifest.service.d.ts.map +1 -0
  143. package/dist/app/services/prism-manifest.service.js +53 -0
  144. package/dist/app/services/prism-navigation.service.d.ts +18 -0
  145. package/dist/app/services/prism-navigation.service.d.ts.map +1 -0
  146. package/dist/app/services/prism-navigation.service.js +94 -0
  147. package/dist/app/services/prism-panel.service.d.ts +8 -0
  148. package/dist/app/services/prism-panel.service.d.ts.map +1 -0
  149. package/dist/app/services/prism-panel.service.js +12 -0
  150. package/dist/app/services/prism-plugin.service.d.ts +12 -0
  151. package/dist/app/services/prism-plugin.service.d.ts.map +1 -0
  152. package/dist/app/services/prism-plugin.service.js +32 -0
  153. package/dist/app/services/prism-renderer.service.d.ts +18 -0
  154. package/dist/app/services/prism-renderer.service.d.ts.map +1 -0
  155. package/dist/app/services/prism-renderer.service.js +84 -0
  156. package/dist/app/services/prism-search.service.d.ts +13 -0
  157. package/dist/app/services/prism-search.service.d.ts.map +1 -0
  158. package/dist/app/services/prism-search.service.js +39 -0
  159. package/dist/app/services/prism-theme.service.d.ts +9 -0
  160. package/dist/app/services/prism-theme.service.d.ts.map +1 -0
  161. package/dist/app/services/prism-theme.service.js +23 -0
  162. package/dist/app/services/prism-url-state.service.d.ts +16 -0
  163. package/dist/app/services/prism-url-state.service.d.ts.map +1 -0
  164. package/dist/app/services/prism-url-state.service.js +108 -0
  165. package/dist/app/shell/prism-shell.component.d.ts +22 -0
  166. package/dist/app/shell/prism-shell.component.d.ts.map +1 -0
  167. package/dist/app/shell/prism-shell.component.js +283 -0
  168. package/dist/app/sidebar/prism-sidebar.component.d.ts +14 -0
  169. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -0
  170. package/dist/app/sidebar/prism-sidebar.component.js +105 -0
  171. package/dist/app/theme/prism-default-theme.d.ts +4 -0
  172. package/dist/app/theme/prism-default-theme.d.ts.map +1 -0
  173. package/dist/app/theme/prism-default-theme.js +57 -0
  174. package/dist/app/tokens/prism-tokens.d.ts +11 -0
  175. package/dist/app/tokens/prism-tokens.d.ts.map +1 -0
  176. package/dist/app/tokens/prism-tokens.js +7 -0
  177. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +22 -0
  178. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -0
  179. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +90 -0
  180. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +10 -0
  181. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -0
  182. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +65 -0
  183. package/dist/builder/build/index.d.ts +6 -0
  184. package/dist/builder/build/index.d.ts.map +1 -0
  185. package/dist/builder/build/index.js +15 -0
  186. package/dist/builder/build/schema.d.ts +9 -0
  187. package/dist/builder/build/schema.d.ts.map +1 -0
  188. package/dist/builder/build/schema.js +1 -0
  189. package/dist/builder/config-loader/config-loader.d.ts +8 -0
  190. package/dist/builder/config-loader/config-loader.d.ts.map +1 -0
  191. package/dist/builder/config-loader/config-loader.js +33 -0
  192. package/dist/builder/config-loader/index.d.ts +3 -0
  193. package/dist/builder/config-loader/index.d.ts.map +1 -0
  194. package/dist/builder/config-loader/index.js +1 -0
  195. package/dist/builder/icon-resolver/icon-resolver.d.ts +7 -0
  196. package/dist/builder/icon-resolver/icon-resolver.d.ts.map +1 -0
  197. package/dist/builder/icon-resolver/icon-resolver.js +12 -0
  198. package/dist/builder/icon-resolver/index.d.ts +2 -0
  199. package/dist/builder/icon-resolver/index.d.ts.map +1 -0
  200. package/dist/builder/icon-resolver/index.js +1 -0
  201. package/dist/builder/manifest/host-parser.d.ts +6 -0
  202. package/dist/builder/manifest/host-parser.d.ts.map +1 -0
  203. package/dist/builder/manifest/host-parser.js +9 -0
  204. package/dist/builder/manifest/index.d.ts +3 -0
  205. package/dist/builder/manifest/index.d.ts.map +1 -0
  206. package/dist/builder/manifest/index.js +1 -0
  207. package/dist/builder/manifest/runtime-manifest.generator.d.ts +9 -0
  208. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -0
  209. package/dist/builder/manifest/runtime-manifest.generator.js +216 -0
  210. package/dist/builder/plugin-runner/index.d.ts +2 -0
  211. package/dist/builder/plugin-runner/index.d.ts.map +1 -0
  212. package/dist/builder/plugin-runner/index.js +1 -0
  213. package/dist/builder/plugin-runner/plugin-runner.d.ts +3 -0
  214. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -0
  215. package/dist/builder/plugin-runner/plugin-runner.js +38 -0
  216. package/dist/builder/scanner/ast-utils.d.ts +20 -0
  217. package/dist/builder/scanner/ast-utils.d.ts.map +1 -0
  218. package/dist/builder/scanner/ast-utils.js +100 -0
  219. package/dist/builder/scanner/component.scanner.d.ts +7 -0
  220. package/dist/builder/scanner/component.scanner.d.ts.map +1 -0
  221. package/dist/builder/scanner/component.scanner.js +113 -0
  222. package/dist/builder/scanner/entry-point-discovery.d.ts +6 -0
  223. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -0
  224. package/dist/builder/scanner/entry-point-discovery.js +38 -0
  225. package/dist/builder/scanner/entry-point.scanner.d.ts +11 -0
  226. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -0
  227. package/dist/builder/scanner/entry-point.scanner.js +19 -0
  228. package/dist/builder/scanner/index.d.ts +8 -0
  229. package/dist/builder/scanner/index.d.ts.map +1 -0
  230. package/dist/builder/scanner/index.js +6 -0
  231. package/dist/builder/scanner/input.extractor.d.ts +11 -0
  232. package/dist/builder/scanner/input.extractor.d.ts.map +1 -0
  233. package/dist/builder/scanner/input.extractor.js +169 -0
  234. package/dist/builder/scanner/manifest.generator.d.ts +6 -0
  235. package/dist/builder/scanner/manifest.generator.d.ts.map +1 -0
  236. package/dist/builder/scanner/manifest.generator.js +59 -0
  237. package/dist/builder/scanner/scanner.d.ts +16 -0
  238. package/dist/builder/scanner/scanner.d.ts.map +1 -0
  239. package/dist/builder/scanner/scanner.js +28 -0
  240. package/dist/builder/serve/index.d.ts +6 -0
  241. package/dist/builder/serve/index.d.ts.map +1 -0
  242. package/dist/builder/serve/index.js +48 -0
  243. package/dist/builder/serve/schema.d.ts +9 -0
  244. package/dist/builder/serve/schema.d.ts.map +1 -0
  245. package/dist/builder/serve/schema.js +1 -0
  246. package/dist/builder/shared/index.d.ts +3 -0
  247. package/dist/builder/shared/index.d.ts.map +1 -0
  248. package/dist/builder/shared/index.js +1 -0
  249. package/dist/builder/shared/prism-pipeline.d.ts +21 -0
  250. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -0
  251. package/dist/builder/shared/prism-pipeline.js +95 -0
  252. package/dist/builder/token-scanner/index.d.ts +2 -0
  253. package/dist/builder/token-scanner/index.d.ts.map +1 -0
  254. package/dist/builder/token-scanner/index.js +1 -0
  255. package/dist/builder/token-scanner/token-scanner.d.ts +9 -0
  256. package/dist/builder/token-scanner/token-scanner.d.ts.map +1 -0
  257. package/dist/builder/token-scanner/token-scanner.js +95 -0
  258. package/dist/builder/watcher/index.d.ts +3 -0
  259. package/dist/builder/watcher/index.d.ts.map +1 -0
  260. package/dist/builder/watcher/index.js +1 -0
  261. package/dist/builder/watcher/prism-watcher.d.ts +29 -0
  262. package/dist/builder/watcher/prism-watcher.d.ts.map +1 -0
  263. package/dist/builder/watcher/prism-watcher.js +79 -0
  264. package/dist/config/index.d.ts +6 -0
  265. package/dist/config/index.d.ts.map +1 -0
  266. package/dist/config/index.js +2 -0
  267. package/dist/decorator/index.d.ts +3 -0
  268. package/dist/decorator/index.d.ts.map +1 -0
  269. package/dist/decorator/index.js +1 -0
  270. package/dist/decorator/showcase.decorator.d.ts +5 -0
  271. package/dist/decorator/showcase.decorator.d.ts.map +1 -0
  272. package/dist/decorator/showcase.decorator.js +7 -0
  273. package/dist/decorator/showcase.types.d.ts +54 -0
  274. package/dist/decorator/showcase.types.d.ts.map +1 -0
  275. package/dist/decorator/showcase.types.js +1 -0
  276. package/dist/index.d.ts +4 -0
  277. package/dist/index.d.ts.map +1 -0
  278. package/dist/index.js +6 -0
  279. package/dist/plugin/define-config.d.ts +4 -0
  280. package/dist/plugin/define-config.d.ts.map +1 -0
  281. package/dist/plugin/define-config.js +4 -0
  282. package/dist/plugin/index.d.ts +8 -0
  283. package/dist/plugin/index.d.ts.map +1 -0
  284. package/dist/plugin/index.js +3 -0
  285. package/dist/plugin/page-helpers.d.ts +19 -0
  286. package/dist/plugin/page-helpers.d.ts.map +1 -0
  287. package/dist/plugin/page-helpers.js +20 -0
  288. package/dist/plugin/page.types.d.ts +19 -0
  289. package/dist/plugin/page.types.d.ts.map +1 -0
  290. package/dist/plugin/page.types.js +1 -0
  291. package/dist/plugin/plugin.types.d.ts +98 -0
  292. package/dist/plugin/plugin.types.d.ts.map +1 -0
  293. package/dist/plugin/plugin.types.js +1 -0
  294. package/dist/schematics/ng-add/index.d.ts +4 -0
  295. package/dist/schematics/ng-add/index.d.ts.map +1 -0
  296. package/dist/schematics/ng-add/index.js +179 -0
  297. package/dist/schematics/ng-add/schema.d.ts +5 -0
  298. package/dist/schematics/ng-add/schema.d.ts.map +1 -0
  299. package/dist/schematics/ng-add/schema.js +1 -0
  300. package/dist/test-setup-browser.d.ts +2 -0
  301. package/dist/test-setup-browser.d.ts.map +1 -0
  302. package/dist/test-setup-browser.js +4 -0
  303. package/package.json +73 -0
  304. package/schematics/collection.json +10 -0
  305. package/schematics/ng-add/schema.json +20 -0
  306. package/src/builder/build/schema.json +35 -0
  307. package/src/builder/serve/schema.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-runner.d.ts","sourceRoot":"","sources":["../../../src/builder/plugin-runner/plugin-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,8BAA8B,CAAC;AAGnG,wBAAsB,cAAc,CAClC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
@@ -0,0 +1,38 @@
1
+ export async function runPluginHooks(manifest, plugins) {
2
+ let components = [...manifest.components];
3
+ for (const comp of components) {
4
+ let current = comp;
5
+ for (const plugin of plugins) {
6
+ if (plugin.onComponentScanned) {
7
+ const result = await plugin.onComponentScanned(current);
8
+ if (result) {
9
+ current = result;
10
+ }
11
+ }
12
+ }
13
+ components[components.indexOf(comp)] = current;
14
+ }
15
+ let pages = [...(manifest.pages ?? [])];
16
+ for (let i = 0; i < pages.length; i++) {
17
+ let current = pages[i];
18
+ for (const plugin of plugins) {
19
+ if (plugin.onPageScanned) {
20
+ const result = await plugin.onPageScanned(current);
21
+ if (result) {
22
+ current = result;
23
+ }
24
+ }
25
+ }
26
+ pages[i] = current;
27
+ }
28
+ let result = { components, pages };
29
+ for (const plugin of plugins) {
30
+ if (plugin.onManifestReady) {
31
+ const updated = await plugin.onManifestReady(result);
32
+ if (updated) {
33
+ result = updated;
34
+ }
35
+ }
36
+ }
37
+ return result;
38
+ }
@@ -0,0 +1,20 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Statically evaluate an AST expression node.
4
+ * Returns `undefined` for non-evaluable expressions (variables, function calls, spread).
5
+ */
6
+ export declare function evaluateExpression(node: ts.Expression): unknown;
7
+ /**
8
+ * Find a decorator by name on a class or property declaration.
9
+ */
10
+ export declare function findDecorator(node: ts.ClassDeclaration | ts.PropertyDeclaration, name: string): ts.Decorator | undefined;
11
+ /**
12
+ * Extract the first argument of a decorator call expression.
13
+ * Returns undefined if the decorator is not a call or has no arguments.
14
+ */
15
+ export declare function getDecoratorArgument(decorator: ts.Decorator): ts.Expression | undefined;
16
+ /**
17
+ * Get the JSDoc comment for a node.
18
+ */
19
+ export declare function getJsDocComment(node: ts.Node, checker: ts.TypeChecker): string | undefined;
20
+ //# sourceMappingURL=ast-utils.d.ts.map
@@ -0,0 +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,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAoD/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,mBAAmB,EAClD,IAAI,EAAE,MAAM,GACX,EAAE,CAAC,SAAS,GAAG,SAAS,CAc1B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAMvF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAU1F"}
@@ -0,0 +1,100 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Statically evaluate an AST expression node.
4
+ * Returns `undefined` for non-evaluable expressions (variables, function calls, spread).
5
+ */
6
+ export function evaluateExpression(node) {
7
+ if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {
8
+ return node.text;
9
+ }
10
+ if (ts.isNumericLiteral(node)) {
11
+ return Number(node.text);
12
+ }
13
+ if (node.kind === ts.SyntaxKind.TrueKeyword)
14
+ return true;
15
+ if (node.kind === ts.SyntaxKind.FalseKeyword)
16
+ return false;
17
+ if (node.kind === ts.SyntaxKind.NullKeyword)
18
+ return null;
19
+ if (node.kind === ts.SyntaxKind.UndefinedKeyword)
20
+ return undefined;
21
+ if (ts.isParenthesizedExpression(node)) {
22
+ return evaluateExpression(node.expression);
23
+ }
24
+ if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) {
25
+ const operand = evaluateExpression(node.operand);
26
+ if (typeof operand === 'number')
27
+ return -operand;
28
+ return undefined;
29
+ }
30
+ if (ts.isArrayLiteralExpression(node)) {
31
+ const result = [];
32
+ for (const element of node.elements) {
33
+ if (ts.isSpreadElement(element))
34
+ return undefined;
35
+ result.push(evaluateExpression(element));
36
+ }
37
+ return result;
38
+ }
39
+ if (ts.isObjectLiteralExpression(node)) {
40
+ const result = {};
41
+ for (const prop of node.properties) {
42
+ if (ts.isSpreadAssignment(prop))
43
+ return undefined;
44
+ if (!ts.isPropertyAssignment(prop))
45
+ return undefined;
46
+ const key = ts.isIdentifier(prop.name)
47
+ ? prop.name.text
48
+ : ts.isStringLiteral(prop.name)
49
+ ? prop.name.text
50
+ : undefined;
51
+ if (key === undefined)
52
+ return undefined;
53
+ result[key] = evaluateExpression(prop.initializer);
54
+ }
55
+ return result;
56
+ }
57
+ return undefined;
58
+ }
59
+ /**
60
+ * Find a decorator by name on a class or property declaration.
61
+ */
62
+ export function findDecorator(node, name) {
63
+ const decorators = ts.getDecorators(node);
64
+ if (!decorators)
65
+ return undefined;
66
+ return decorators.find((d) => {
67
+ const expr = d.expression;
68
+ // @Name
69
+ if (ts.isIdentifier(expr))
70
+ return expr.text === name;
71
+ // @Name(...)
72
+ if (ts.isCallExpression(expr) && ts.isIdentifier(expr.expression)) {
73
+ return expr.expression.text === name;
74
+ }
75
+ return false;
76
+ });
77
+ }
78
+ /**
79
+ * Extract the first argument of a decorator call expression.
80
+ * Returns undefined if the decorator is not a call or has no arguments.
81
+ */
82
+ export function getDecoratorArgument(decorator) {
83
+ const expr = decorator.expression;
84
+ if (ts.isCallExpression(expr) && expr.arguments.length > 0) {
85
+ return expr.arguments[0];
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Get the JSDoc comment for a node.
91
+ */
92
+ export function getJsDocComment(node, checker) {
93
+ const symbol = checker.getSymbolAtLocation(ts.isClassDeclaration(node) || ts.isPropertyDeclaration(node)
94
+ ? (node.name ?? node)
95
+ : node);
96
+ if (!symbol)
97
+ return undefined;
98
+ const doc = ts.displayPartsToString(symbol.getDocumentationComment(checker)).trim();
99
+ return doc || undefined;
100
+ }
@@ -0,0 +1,7 @@
1
+ import ts from 'typescript';
2
+ import type { ScannedComponent } from '../../plugin/plugin.types.js';
3
+ /**
4
+ * Scan exported symbols for Angular components annotated with @Showcase.
5
+ */
6
+ export declare function scanComponents(exports: ts.Symbol[], checker: ts.TypeChecker): ScannedComponent[];
7
+ //# sourceMappingURL=component.scanner.d.ts.map
@@ -0,0 +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;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKrE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,EACpB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,gBAAgB,EAAE,CA0CpB"}
@@ -0,0 +1,113 @@
1
+ import ts from 'typescript';
2
+ import { evaluateExpression, findDecorator, getDecoratorArgument } from './ast-utils.js';
3
+ import { extractInputs, extractOutputs } from './input.extractor.js';
4
+ /**
5
+ * Scan exported symbols for Angular components annotated with @Showcase.
6
+ */
7
+ export function scanComponents(exports, checker) {
8
+ const components = [];
9
+ for (const sym of exports) {
10
+ const resolved = sym.flags & ts.SymbolFlags.Alias
11
+ ? checker.getAliasedSymbol(sym)
12
+ : sym;
13
+ const classDecl = resolved.declarations?.find(ts.isClassDeclaration);
14
+ if (!classDecl)
15
+ continue;
16
+ const showcaseDecorator = findDecorator(classDecl, 'Showcase');
17
+ if (!showcaseDecorator)
18
+ continue;
19
+ const showcaseConfig = extractShowcaseConfig(showcaseDecorator);
20
+ if (!showcaseConfig)
21
+ continue;
22
+ const componentMeta = extractComponentMeta(classDecl);
23
+ const inputs = extractInputs(classDecl, checker);
24
+ const outputs = extractOutputs(classDecl, checker);
25
+ const filePath = classDecl.getSourceFile().fileName;
26
+ const className = classDecl.name?.text ?? 'Anonymous';
27
+ if (hasDecoratorInputs(classDecl)) {
28
+ console.warn(`⚠ ng-prism: ${className} uses @Input() decorators which are not fully supported. ` +
29
+ `Migrate to input() signals for full ng-prism support.`);
30
+ }
31
+ components.push({
32
+ className,
33
+ filePath,
34
+ showcaseConfig,
35
+ inputs,
36
+ outputs,
37
+ componentMeta,
38
+ });
39
+ }
40
+ return components;
41
+ }
42
+ function hasDecoratorInputs(classDecl) {
43
+ for (const member of classDecl.members) {
44
+ if (!ts.isPropertyDeclaration(member))
45
+ continue;
46
+ if (findDecorator(member, 'Input'))
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ function extractShowcaseConfig(decorator) {
52
+ const arg = getDecoratorArgument(decorator);
53
+ if (!arg)
54
+ return undefined;
55
+ const raw = evaluateExpression(arg);
56
+ if (!raw || typeof raw !== 'object' || !('title' in raw))
57
+ return undefined;
58
+ const obj = raw;
59
+ const config = {
60
+ title: obj['title'],
61
+ };
62
+ if (obj['description'])
63
+ config.description = obj['description'];
64
+ if (obj['category'])
65
+ config.category = obj['category'];
66
+ if (obj['tags'])
67
+ config.tags = obj['tags'];
68
+ if (obj['meta'])
69
+ config.meta = obj['meta'];
70
+ if (obj['host'] !== undefined)
71
+ config.host = obj['host'];
72
+ if (obj['renderPage'])
73
+ config.renderPage = obj['renderPage'];
74
+ if (Array.isArray(obj['variants'])) {
75
+ config.variants = obj['variants'];
76
+ }
77
+ return config;
78
+ }
79
+ function extractComponentMeta(classDecl) {
80
+ const componentDecorator = findDecorator(classDecl, 'Component');
81
+ if (componentDecorator) {
82
+ const arg = getDecoratorArgument(componentDecorator);
83
+ if (!arg)
84
+ return { selector: '', standalone: true, isDirective: false };
85
+ const raw = evaluateExpression(arg);
86
+ if (!raw || typeof raw !== 'object') {
87
+ return { selector: '', standalone: true, isDirective: false };
88
+ }
89
+ const obj = raw;
90
+ return {
91
+ selector: obj['selector'] ?? '',
92
+ standalone: obj['standalone'] !== false,
93
+ isDirective: false,
94
+ };
95
+ }
96
+ const directiveDecorator = findDecorator(classDecl, 'Directive');
97
+ if (directiveDecorator) {
98
+ const arg = getDecoratorArgument(directiveDecorator);
99
+ if (!arg)
100
+ return { selector: '', standalone: true, isDirective: true };
101
+ const raw = evaluateExpression(arg);
102
+ if (!raw || typeof raw !== 'object') {
103
+ return { selector: '', standalone: true, isDirective: true };
104
+ }
105
+ const obj = raw;
106
+ return {
107
+ selector: obj['selector'] ?? '',
108
+ standalone: obj['standalone'] !== false,
109
+ isDirective: true,
110
+ };
111
+ }
112
+ return { selector: '', standalone: true, isDirective: false };
113
+ }
@@ -0,0 +1,6 @@
1
+ export interface DiscoveredEntryPoint {
2
+ entryFile: string;
3
+ importPath: string;
4
+ }
5
+ export declare function discoverSecondaryEntryPoints(libraryRoot: string, baseImportPath: string): DiscoveredEntryPoint[];
6
+ //# sourceMappingURL=entry-point-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-point-discovery.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point-discovery.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,oBAAoB,EAAE,CAIxB"}
@@ -0,0 +1,38 @@
1
+ import { readdirSync, readFileSync, statSync, existsSync } from 'fs';
2
+ import { join, relative, posix } from 'path';
3
+ export function discoverSecondaryEntryPoints(libraryRoot, baseImportPath) {
4
+ const entryPoints = [];
5
+ findNgPackageJsons(libraryRoot, libraryRoot, baseImportPath, entryPoints);
6
+ return entryPoints;
7
+ }
8
+ function findNgPackageJsons(dir, libraryRoot, baseImportPath, result) {
9
+ let entries;
10
+ try {
11
+ entries = readdirSync(dir);
12
+ }
13
+ catch {
14
+ return;
15
+ }
16
+ for (const entry of entries) {
17
+ if (entry === 'node_modules' || entry === '.git')
18
+ continue;
19
+ const fullPath = join(dir, entry);
20
+ if (!statSync(fullPath).isDirectory())
21
+ continue;
22
+ const ngPackagePath = join(fullPath, 'ng-package.json');
23
+ if (!existsSync(ngPackagePath)) {
24
+ findNgPackageJsons(fullPath, libraryRoot, baseImportPath, result);
25
+ continue;
26
+ }
27
+ const ngPackage = JSON.parse(readFileSync(ngPackagePath, 'utf-8'));
28
+ if (ngPackage.dest)
29
+ continue;
30
+ const entryFile = ngPackage.lib?.entryFile ?? 'public-api.ts';
31
+ const entryFilePath = join(fullPath, entryFile);
32
+ if (!existsSync(entryFilePath))
33
+ continue;
34
+ const relDir = relative(libraryRoot, fullPath);
35
+ const importPath = posix.join(baseImportPath, relDir.split('\\').join('/'));
36
+ result.push({ entryFile: entryFilePath, importPath });
37
+ }
38
+ }
@@ -0,0 +1,11 @@
1
+ import ts from 'typescript';
2
+ export interface EntryPointResult {
3
+ program: ts.Program;
4
+ exports: ts.Symbol[];
5
+ }
6
+ /**
7
+ * Resolve all exported symbols from an entry-point file (e.g. public-api.ts).
8
+ * Re-exports (`export * from '...'`) are resolved automatically by TypeScript.
9
+ */
10
+ export declare function resolveEntryPointExports(entryPointPath: string, compilerOptions: ts.CompilerOptions, previousProgram?: ts.Program): EntryPointResult;
11
+ //# sourceMappingURL=entry-point.scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-point.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,EAAE,CAAC,eAAe,EACnC,eAAe,CAAC,EAAE,EAAE,CAAC,OAAO,GAC3B,gBAAgB,CAqBlB"}
@@ -0,0 +1,19 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Resolve all exported symbols from an entry-point file (e.g. public-api.ts).
4
+ * Re-exports (`export * from '...'`) are resolved automatically by TypeScript.
5
+ */
6
+ export function resolveEntryPointExports(entryPointPath, compilerOptions, previousProgram) {
7
+ const program = ts.createProgram([entryPointPath], compilerOptions, undefined, previousProgram);
8
+ const checker = program.getTypeChecker();
9
+ const sourceFile = program.getSourceFile(entryPointPath);
10
+ if (!sourceFile) {
11
+ throw new Error(`Could not find source file: ${entryPointPath}`);
12
+ }
13
+ const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
14
+ if (!moduleSymbol) {
15
+ return { program, exports: [] };
16
+ }
17
+ const exports = checker.getExportsOfModule(moduleSymbol);
18
+ return { program, exports };
19
+ }
@@ -0,0 +1,8 @@
1
+ export { createScanner } from './scanner.js';
2
+ export type { CreateScannerOptions, Scanner } from './scanner.js';
3
+ export { resolveEntryPointExports } from './entry-point.scanner.js';
4
+ export type { EntryPointResult } from './entry-point.scanner.js';
5
+ export { scanComponents } from './component.scanner.js';
6
+ export { extractInputs, extractOutputs } from './input.extractor.js';
7
+ export { generateManifest } from './manifest.generator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,6 @@
1
+ // Scanner API exports
2
+ export { createScanner } from './scanner.js';
3
+ export { resolveEntryPointExports } from './entry-point.scanner.js';
4
+ export { scanComponents } from './component.scanner.js';
5
+ export { extractInputs, extractOutputs } from './input.extractor.js';
6
+ export { generateManifest } from './manifest.generator.js';
@@ -0,0 +1,11 @@
1
+ import ts from 'typescript';
2
+ import type { InputMeta, OutputMeta } from '../../plugin/plugin.types.js';
3
+ /**
4
+ * Extract all @Input(), input() and model() signal metadata from a class declaration.
5
+ */
6
+ export declare function extractInputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker): InputMeta[];
7
+ /**
8
+ * Extract all @Output() and output() signal metadata from a class declaration.
9
+ */
10
+ export declare function extractOutputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker): OutputMeta[];
11
+ //# sourceMappingURL=input.extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.extractor.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/input.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1E;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,EAAE,CAgClG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,UAAU,EAAE,CAuBpG"}
@@ -0,0 +1,169 @@
1
+ import ts from 'typescript';
2
+ import { evaluateExpression, findDecorator, getDecoratorArgument, getJsDocComment } from './ast-utils.js';
3
+ /**
4
+ * Extract all @Input(), input() and model() signal metadata from a class declaration.
5
+ */
6
+ export function extractInputs(classDecl, checker) {
7
+ const inputs = [];
8
+ for (const member of classDecl.members) {
9
+ if (!ts.isPropertyDeclaration(member))
10
+ continue;
11
+ const name = member.name && ts.isIdentifier(member.name) ? member.name.text : undefined;
12
+ if (!name)
13
+ continue;
14
+ const inputDecorator = findDecorator(member, 'Input');
15
+ if (inputDecorator) {
16
+ const required = isDecoratorInputRequired(inputDecorator);
17
+ const defaultValue = member.initializer ? evaluateExpression(member.initializer) : undefined;
18
+ const doc = getJsDocComment(member, checker);
19
+ const { type, values, rawType } = resolveDecoratorInputType(member, checker);
20
+ inputs.push({ name, type, rawType, required, ...(values && { values }), ...(defaultValue !== undefined && { defaultValue }), ...(doc && { doc }) });
21
+ continue;
22
+ }
23
+ const signalCall = getInputSignalCall(member);
24
+ if (signalCall) {
25
+ const required = isSignalInputRequired(signalCall);
26
+ const defaultValue = !required && signalCall.arguments.length > 0
27
+ ? evaluateExpression(signalCall.arguments[0])
28
+ : undefined;
29
+ const doc = getJsDocComment(member, checker);
30
+ const { type, values, rawType } = resolveSignalInputType(signalCall, checker);
31
+ inputs.push({ name, type, rawType, required, ...(values && { values }), ...(defaultValue !== undefined && { defaultValue }), ...(doc && { doc }) });
32
+ }
33
+ }
34
+ return inputs;
35
+ }
36
+ /**
37
+ * Extract all @Output() and output() signal metadata from a class declaration.
38
+ */
39
+ export function extractOutputs(classDecl, checker) {
40
+ const outputs = [];
41
+ for (const member of classDecl.members) {
42
+ if (!ts.isPropertyDeclaration(member))
43
+ continue;
44
+ const name = member.name && ts.isIdentifier(member.name) ? member.name.text : undefined;
45
+ if (!name)
46
+ continue;
47
+ const outputDecorator = findDecorator(member, 'Output');
48
+ if (outputDecorator) {
49
+ const doc = getJsDocComment(member, checker);
50
+ outputs.push({ name, ...(doc && { doc }) });
51
+ continue;
52
+ }
53
+ if (isOutputSignal(member)) {
54
+ const doc = getJsDocComment(member, checker);
55
+ outputs.push({ name, ...(doc && { doc }) });
56
+ }
57
+ }
58
+ return outputs;
59
+ }
60
+ function getInputSignalCall(member) {
61
+ const init = member.initializer;
62
+ if (!init || !ts.isCallExpression(init))
63
+ return null;
64
+ const expr = init.expression;
65
+ if (ts.isIdentifier(expr) && (expr.text === 'input' || expr.text === 'model'))
66
+ return init;
67
+ if (ts.isPropertyAccessExpression(expr) &&
68
+ ts.isIdentifier(expr.expression) && (expr.expression.text === 'input' || expr.expression.text === 'model') &&
69
+ ts.isIdentifier(expr.name) && expr.name.text === 'required') {
70
+ return init;
71
+ }
72
+ return null;
73
+ }
74
+ function isSignalInputRequired(callExpr) {
75
+ const expr = callExpr.expression;
76
+ return (ts.isPropertyAccessExpression(expr) &&
77
+ ts.isIdentifier(expr.name) &&
78
+ expr.name.text === 'required');
79
+ }
80
+ function isOutputSignal(member) {
81
+ const init = member.initializer;
82
+ if (!init || !ts.isCallExpression(init))
83
+ return false;
84
+ const expr = init.expression;
85
+ return ts.isIdentifier(expr) && expr.text === 'output';
86
+ }
87
+ function resolveSignalInputType(callExpr, checker) {
88
+ if (callExpr.typeArguments && callExpr.typeArguments.length > 0) {
89
+ const resolved = checker.getTypeFromTypeNode(callExpr.typeArguments[0]);
90
+ return mapType(resolved, checker);
91
+ }
92
+ if (callExpr.arguments.length > 0) {
93
+ const argType = checker.getTypeAtLocation(callExpr.arguments[0]);
94
+ return mapType(argType, checker);
95
+ }
96
+ return { type: 'unknown', rawType: 'unknown' };
97
+ }
98
+ function isDecoratorInputRequired(decorator) {
99
+ const arg = getDecoratorArgument(decorator);
100
+ if (!arg || !ts.isObjectLiteralExpression(arg))
101
+ return false;
102
+ for (const prop of arg.properties) {
103
+ if (ts.isPropertyAssignment(prop) &&
104
+ ts.isIdentifier(prop.name) &&
105
+ prop.name.text === 'required') {
106
+ return prop.initializer.kind === ts.SyntaxKind.TrueKeyword;
107
+ }
108
+ }
109
+ return false;
110
+ }
111
+ function resolveDecoratorInputType(member, checker) {
112
+ const tsType = checker.getTypeAtLocation(member);
113
+ return mapType(tsType, checker);
114
+ }
115
+ function getRawTypeLabel(tsType, checker) {
116
+ if (tsType.flags & (ts.TypeFlags.Boolean | ts.TypeFlags.BooleanLike | ts.TypeFlags.BooleanLiteral)) {
117
+ return 'boolean';
118
+ }
119
+ if (tsType.isUnion()) {
120
+ const meaningful = tsType.types.filter((t) => !(t.flags & ts.TypeFlags.Undefined) && !(t.flags & ts.TypeFlags.Null));
121
+ if (meaningful.length === 0)
122
+ return checker.typeToString(tsType);
123
+ if (meaningful.every((t) => t.flags & ts.TypeFlags.BooleanLiteral))
124
+ return 'boolean';
125
+ if (meaningful.length === 1)
126
+ return checker.typeToString(meaningful[0]);
127
+ if (tsType.aliasSymbol)
128
+ return tsType.aliasSymbol.getName();
129
+ return meaningful.map((t) => checker.typeToString(t)).join(' | ');
130
+ }
131
+ return checker.typeToString(tsType);
132
+ }
133
+ function mapType(tsType, checker) {
134
+ const rawType = getRawTypeLabel(tsType, checker);
135
+ if (tsType.flags & ts.TypeFlags.BooleanLike) {
136
+ return { type: 'boolean', rawType };
137
+ }
138
+ if (tsType.flags & ts.TypeFlags.Boolean) {
139
+ return { type: 'boolean', rawType };
140
+ }
141
+ if (tsType.isUnion()) {
142
+ const filtered = tsType.types.filter((t) => !(t.flags & ts.TypeFlags.Undefined) &&
143
+ !(t.flags & ts.TypeFlags.Null));
144
+ if (filtered.every((t) => t.flags & ts.TypeFlags.BooleanLiteral)) {
145
+ return { type: 'boolean', rawType };
146
+ }
147
+ if (filtered.every((t) => t.isStringLiteral())) {
148
+ const values = filtered.map((t) => t.value);
149
+ return { type: 'union', values, rawType };
150
+ }
151
+ if (filtered.length === 1) {
152
+ return { ...mapType(filtered[0], checker), rawType };
153
+ }
154
+ return { type: 'unknown', rawType };
155
+ }
156
+ if (tsType.flags & ts.TypeFlags.StringLike) {
157
+ return { type: 'string', rawType };
158
+ }
159
+ if (tsType.flags & ts.TypeFlags.NumberLike) {
160
+ return { type: 'number', rawType };
161
+ }
162
+ if (checker.isArrayType(tsType)) {
163
+ return { type: 'array', rawType };
164
+ }
165
+ if (tsType.flags & ts.TypeFlags.Object) {
166
+ return { type: 'object', rawType };
167
+ }
168
+ return { type: 'unknown', rawType };
169
+ }
@@ -0,0 +1,6 @@
1
+ import type { ScannedComponent } from '../../plugin/plugin.types.js';
2
+ /**
3
+ * Generate TypeScript source code for a prism-manifest.ts file.
4
+ */
5
+ export declare function generateManifest(components: ScannedComponent[]): string;
6
+ //# sourceMappingURL=manifest.generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.generator.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/manifest.generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,gBAAgB,EAAE,GAC7B,MAAM,CAyBR"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Generate TypeScript source code for a prism-manifest.ts file.
3
+ */
4
+ export function generateManifest(components) {
5
+ const lines = [
6
+ '// AUTO-GENERATED by ng-prism — do not edit!',
7
+ "import type { PrismManifest } from 'ng-prism/plugin';",
8
+ '',
9
+ 'export const PRISM_MANIFEST: PrismManifest = {',
10
+ ' components: [',
11
+ ];
12
+ for (const comp of components) {
13
+ lines.push(' {');
14
+ lines.push(` className: ${json(comp.className)},`);
15
+ lines.push(` filePath: ${json(comp.filePath)},`);
16
+ lines.push(` showcaseConfig: ${formatObject(comp.showcaseConfig, 6)},`);
17
+ lines.push(` inputs: ${formatArray(comp.inputs, 6)},`);
18
+ lines.push(` outputs: ${formatArray(comp.outputs, 6)},`);
19
+ lines.push(` componentMeta: ${formatObject(comp.componentMeta, 6)},`);
20
+ lines.push(' },');
21
+ }
22
+ lines.push(' ],');
23
+ lines.push('};');
24
+ lines.push('');
25
+ return lines.join('\n');
26
+ }
27
+ function json(value) {
28
+ return JSON.stringify(value);
29
+ }
30
+ function indent(depth) {
31
+ return ' '.repeat(depth);
32
+ }
33
+ function formatObject(obj, baseIndent) {
34
+ const entries = Object.entries(obj).filter(([, v]) => v !== undefined);
35
+ if (entries.length === 0)
36
+ return '{}';
37
+ const inner = baseIndent + 2;
38
+ const lines = entries.map(([key, value]) => {
39
+ const formatted = Array.isArray(value)
40
+ ? formatArray(value, inner)
41
+ : typeof value === 'object' && value !== null
42
+ ? formatObject(value, inner)
43
+ : json(value);
44
+ return `${indent(inner)}${key}: ${formatted},`;
45
+ });
46
+ return `{\n${lines.join('\n')}\n${indent(baseIndent)}}`;
47
+ }
48
+ function formatArray(arr, baseIndent) {
49
+ if (arr.length === 0)
50
+ return '[]';
51
+ const inner = baseIndent + 2;
52
+ const items = arr.map((item) => {
53
+ const formatted = typeof item === 'object' && item !== null && !Array.isArray(item)
54
+ ? formatObject(item, inner)
55
+ : json(item);
56
+ return `${indent(inner)}${formatted},`;
57
+ });
58
+ return `[\n${items.join('\n')}\n${indent(baseIndent)}]`;
59
+ }