@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.
- package/README.md +13 -9
- package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
- package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
- package/dist/app/canvas/canvas-bg.styles.js +1 -1
- package/dist/app/canvas/canvas-overlay-tokens.d.ts +12 -0
- package/dist/app/canvas/canvas-overlay-tokens.d.ts.map +1 -0
- package/dist/app/canvas/canvas-overlay-tokens.js +52 -0
- package/dist/app/canvas/prism-canvas-bg-pill.component.js +2 -2
- package/dist/app/canvas/prism-canvas-pin-row.component.js +2 -2
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts +2 -0
- package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-rulers.component.js +17 -12
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +25 -3
- package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-canvas-toolbar.component.js +154 -89
- package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
- package/dist/app/canvas/prism-template-popover.component.js +16 -7
- package/dist/app/canvas/state-chips.d.ts +50 -0
- package/dist/app/canvas/state-chips.d.ts.map +1 -0
- package/dist/app/canvas/state-chips.js +40 -0
- package/dist/app/component-head/head-metrics.d.ts +35 -19
- package/dist/app/component-head/head-metrics.d.ts.map +1 -1
- package/dist/app/component-head/head-metrics.js +57 -27
- package/dist/app/component-head/pipe-facts.d.ts +9 -0
- package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
- package/dist/app/component-head/pipe-facts.js +15 -0
- package/dist/app/component-head/prism-component-head.component.d.ts +20 -22
- package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-component-head.component.js +85 -96
- package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
- package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-gauge.component.js +51 -67
- package/dist/app/component-head/prism-head-info.component.d.ts +14 -2
- package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-head-info.component.js +84 -20
- package/dist/app/component-head/prism-stat.component.d.ts +4 -5
- package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
- package/dist/app/component-head/prism-stat.component.js +16 -12
- package/dist/app/component-head/service-facts.d.ts +8 -0
- package/dist/app/component-head/service-facts.d.ts.map +1 -0
- package/dist/app/component-head/service-facts.js +11 -0
- package/dist/app/controls/boolean-control.component.js +2 -2
- package/dist/app/controls/json-control.component.js +2 -2
- package/dist/app/controls/union-control.component.js +4 -3
- package/dist/app/directives/resize-value.d.ts +1 -1
- package/dist/app/directives/resize-value.js +1 -1
- package/dist/app/discovery-manifest.d.ts +2 -2
- package/dist/app/discovery-manifest.d.ts.map +1 -1
- package/dist/app/discovery-manifest.js +15 -3
- package/dist/app/header/header-brand.d.ts +25 -0
- package/dist/app/header/header-brand.d.ts.map +1 -0
- package/dist/app/header/header-brand.js +10 -0
- package/dist/app/header/prism-header.component.d.ts +2 -2
- package/dist/app/header/prism-header.component.d.ts.map +1 -1
- package/dist/app/header/prism-header.component.js +73 -57
- package/dist/app/icons/icon-registry.d.ts.map +1 -1
- package/dist/app/icons/icon-registry.js +4 -1
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +12 -1
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
- package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
- package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
- package/dist/app/overview/open-in-playground.d.ts +19 -0
- package/dist/app/overview/open-in-playground.d.ts.map +1 -0
- package/dist/app/overview/open-in-playground.js +25 -0
- package/dist/app/overview/overview-matrix.d.ts +85 -0
- package/dist/app/overview/overview-matrix.d.ts.map +1 -0
- package/dist/app/overview/overview-matrix.js +98 -0
- package/dist/app/overview/overview-visibility.d.ts +10 -2
- package/dist/app/overview/overview-visibility.d.ts.map +1 -1
- package/dist/app/overview/overview-visibility.js +14 -3
- package/dist/app/overview/prism-overview-cell.component.d.ts +27 -2
- package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview-cell.component.js +145 -28
- package/dist/app/overview/prism-overview-matrix.component.d.ts +29 -0
- package/dist/app/overview/prism-overview-matrix.component.d.ts.map +1 -0
- package/dist/app/overview/prism-overview-matrix.component.js +155 -0
- package/dist/app/overview/prism-overview.component.d.ts +4 -0
- package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
- package/dist/app/overview/prism-overview.component.js +37 -14
- package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
- package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-core.plugin.js +0 -1
- package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
- package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
- package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
- package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
- package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
- package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
- package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
- package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-score.component.js +19 -35
- package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
- package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
- package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-summary.js +8 -1
- package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
- package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
- package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
- package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
- package/dist/app/panels/a11y/severity.d.ts +9 -0
- package/dist/app/panels/a11y/severity.d.ts.map +1 -0
- package/dist/app/panels/a11y/severity.js +12 -0
- package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -1
- package/dist/app/panels/controls/controls-plugin.js +1 -2
- package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
- package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
- package/dist/app/panels/controls/non-editable-input-types.js +18 -0
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
- package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
- package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
- package/dist/app/panels/events/events-plugin.d.ts.map +1 -1
- package/dist/app/panels/events/events-plugin.js +1 -2
- package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
- package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
- package/dist/app/panels/events/prism-events-panel.component.js +20 -7
- package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
- package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
- package/dist/app/panels/events/prism-json-node.utils.js +8 -0
- package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
- package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
- package/dist/app/panels/panel-host/addon-panels.js +12 -0
- package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
- package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
- package/dist/app/panels/panel-host/panel-badge.js +56 -11
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
- package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
- package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
- package/dist/app/pseudo/pseudo-state-marker.d.ts +32 -10
- package/dist/app/pseudo/pseudo-state-marker.d.ts.map +1 -1
- package/dist/app/pseudo/pseudo-state-marker.js +83 -67
- package/dist/app/pseudo/pseudo-targets.d.ts +11 -0
- package/dist/app/pseudo/pseudo-targets.d.ts.map +1 -0
- package/dist/app/pseudo/pseudo-targets.js +46 -0
- package/dist/app/pseudo/state-fit.d.ts +28 -0
- package/dist/app/pseudo/state-fit.d.ts.map +1 -0
- package/dist/app/pseudo/state-fit.js +97 -0
- package/dist/app/renderer/composition.d.ts +20 -0
- package/dist/app/renderer/composition.d.ts.map +1 -0
- package/dist/app/renderer/composition.js +26 -0
- package/dist/app/renderer/input-bindings.d.ts +28 -0
- package/dist/app/renderer/input-bindings.d.ts.map +1 -0
- package/dist/app/renderer/input-bindings.js +42 -0
- package/dist/app/renderer/known-inputs.d.ts +8 -1
- package/dist/app/renderer/known-inputs.d.ts.map +1 -1
- package/dist/app/renderer/known-inputs.js +13 -5
- package/dist/app/renderer/prism-renderer.component.d.ts +18 -4
- package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
- package/dist/app/renderer/prism-renderer.component.js +78 -44
- package/dist/app/renderer/projectable-content.d.ts +8 -1
- package/dist/app/renderer/projectable-content.d.ts.map +1 -1
- package/dist/app/renderer/projectable-content.js +40 -29
- package/dist/app/renderer/rendered-key.d.ts +20 -6
- package/dist/app/renderer/rendered-key.d.ts.map +1 -1
- package/dist/app/renderer/rendered-key.js +25 -8
- package/dist/app/renderer/snippet-generator.d.ts +14 -2
- package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
- package/dist/app/renderer/snippet-generator.js +138 -81
- package/dist/app/services/navigation-item.d.ts +10 -0
- package/dist/app/services/navigation-item.d.ts.map +1 -0
- package/dist/app/services/navigation-item.js +20 -0
- package/dist/app/services/navigation-item.types.d.ts +8 -0
- package/dist/app/services/navigation-item.types.d.ts.map +1 -1
- package/dist/app/services/prism-layout.service.d.ts +12 -0
- package/dist/app/services/prism-layout.service.d.ts.map +1 -1
- package/dist/app/services/prism-layout.service.js +17 -7
- package/dist/app/services/prism-manifest.service.d.ts +4 -0
- package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
- package/dist/app/services/prism-manifest.service.js +4 -0
- package/dist/app/services/prism-navigation.service.d.ts +12 -0
- package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
- package/dist/app/services/prism-navigation.service.js +85 -19
- package/dist/app/services/prism-panel.service.d.ts +7 -3
- package/dist/app/services/prism-panel.service.d.ts.map +1 -1
- package/dist/app/services/prism-panel.service.js +13 -4
- package/dist/app/services/prism-pseudo-state.service.d.ts +59 -14
- package/dist/app/services/prism-pseudo-state.service.d.ts.map +1 -1
- package/dist/app/services/prism-pseudo-state.service.js +86 -29
- package/dist/app/services/prism-renderer.service.d.ts +23 -0
- package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
- package/dist/app/services/prism-renderer.service.js +77 -8
- package/dist/app/services/prism-search.service.d.ts +4 -0
- package/dist/app/services/prism-search.service.d.ts.map +1 -1
- package/dist/app/services/prism-search.service.js +29 -6
- package/dist/app/services/prism-theme.service.d.ts +11 -3
- package/dist/app/services/prism-theme.service.d.ts.map +1 -1
- package/dist/app/services/prism-theme.service.js +27 -19
- package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
- package/dist/app/services/prism-url-state.service.js +81 -12
- package/dist/app/shared/badge.types.d.ts +7 -0
- package/dist/app/shared/badge.types.d.ts.map +1 -0
- package/dist/app/shared/badge.types.js +9 -0
- package/dist/app/shared/brand-mark.d.ts +35 -0
- package/dist/app/shared/brand-mark.d.ts.map +1 -0
- package/dist/app/shared/brand-mark.js +52 -0
- package/dist/app/shared/metric-bar.d.ts +6 -0
- package/dist/app/shared/metric-bar.d.ts.map +1 -0
- package/dist/app/shared/metric-bar.js +7 -0
- package/dist/app/shared/prism-badge.component.d.ts +21 -0
- package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
- package/dist/app/shared/prism-badge.component.js +68 -0
- package/dist/app/shared/prism-button.component.d.ts +12 -0
- package/dist/app/shared/prism-button.component.d.ts.map +1 -0
- package/dist/app/shared/prism-button.component.js +28 -0
- package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
- package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
- package/dist/app/shared/prism-icon-button.component.js +37 -0
- package/dist/app/shared/prism-list-row.component.d.ts +17 -0
- package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
- package/dist/app/shared/prism-list-row.component.js +57 -0
- package/dist/app/shared/prism-logo.component.d.ts +24 -0
- package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
- package/dist/app/shared/prism-logo.component.js +77 -0
- package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
- package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
- package/dist/app/shared/prism-metric-badge.component.js +33 -12
- package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
- package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
- package/dist/app/shared/prism-metric-card.component.js +111 -0
- package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
- package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
- package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
- package/dist/app/shared/prism-segmented.component.d.ts +25 -0
- package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
- package/dist/app/shared/prism-segmented.component.js +77 -0
- package/dist/app/shared/prism-tabs.component.d.ts +44 -0
- package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
- package/dist/app/shared/prism-tabs.component.js +134 -0
- package/dist/app/shared/roving-focus.d.ts +13 -0
- package/dist/app/shared/roving-focus.d.ts.map +1 -0
- package/dist/app/shared/roving-focus.js +34 -0
- package/dist/app/shell/prism-shell.component.d.ts +13 -0
- package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
- package/dist/app/shell/prism-shell.component.js +57 -28
- package/dist/app/shell/should-select-first.d.ts +17 -0
- package/dist/app/shell/should-select-first.d.ts.map +1 -0
- package/dist/app/shell/should-select-first.js +13 -0
- package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
- package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
- package/dist/app/sidebar/navigation-decorations.js +33 -2
- package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
- package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
- package/dist/app/sidebar/prism-sidebar.component.js +89 -77
- package/dist/app/theme/deprecated-tokens.d.ts +15 -0
- package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
- package/dist/app/theme/deprecated-tokens.js +22 -0
- package/dist/app/theme/favicon.d.ts +3 -0
- package/dist/app/theme/favicon.d.ts.map +1 -0
- package/dist/app/theme/favicon.js +3 -0
- package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
- package/dist/app/theme/prism-default-theme.js +122 -66
- package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
- package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
- package/dist/app/theme/resolve-theme-tokens.js +43 -0
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
- package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
- package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
- package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
- package/dist/app/view-tab-bar/next-view-id.js +9 -1
- package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
- package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
- package/dist/app/view-tab-bar/panel-inputs.js +41 -0
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
- package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
- package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
- package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
- package/dist/builder/config-loader/deprecated-options.d.ts +9 -0
- package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -0
- package/dist/builder/config-loader/deprecated-options.js +34 -0
- package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
- package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
- package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
- package/dist/builder/manifest/host-parser.d.ts +2 -0
- package/dist/builder/manifest/host-parser.d.ts.map +1 -1
- package/dist/builder/manifest/host-parser.js +9 -4
- package/dist/builder/manifest/manifest-imports.d.ts +34 -0
- package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
- package/dist/builder/manifest/manifest-imports.js +91 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
- package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
- package/dist/builder/manifest/runtime-manifest.generator.js +137 -65
- package/dist/builder/manifest/selector-element.d.ts +16 -0
- package/dist/builder/manifest/selector-element.d.ts.map +1 -0
- package/dist/builder/manifest/selector-element.js +46 -0
- package/dist/builder/manifest/template-literal.d.ts +3 -0
- package/dist/builder/manifest/template-literal.d.ts.map +1 -0
- package/dist/builder/manifest/template-literal.js +4 -0
- package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
- package/dist/builder/plugin-runner/plugin-runner.js +29 -26
- package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
- package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
- package/dist/builder/scanner/api/angular-decorators.js +157 -0
- package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
- package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/component-api.extractor.js +104 -0
- package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
- package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
- package/dist/builder/scanner/api/doc-tags.js +101 -0
- package/dist/builder/scanner/api/export-index.d.ts +18 -0
- package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
- package/dist/builder/scanner/api/export-index.js +22 -0
- package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
- package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/member.extractor.js +270 -0
- package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
- package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
- package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
- package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/api/service-api.extractor.js +119 -0
- package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
- package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
- package/dist/builder/scanner/api/setup.reader.js +89 -0
- package/dist/builder/scanner/api/type-collector.d.ts +24 -0
- package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
- package/dist/builder/scanner/api/type-collector.js +211 -0
- package/dist/builder/scanner/ast-utils.d.ts +8 -0
- package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
- package/dist/builder/scanner/ast-utils.js +37 -1
- package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
- package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
- package/dist/builder/scanner/class-hierarchy.js +12 -6
- package/dist/builder/scanner/component.scanner.d.ts +60 -6
- package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/component.scanner.js +229 -58
- package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
- package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
- package/dist/builder/scanner/composition/compose-template.js +187 -0
- package/dist/builder/scanner/composition/declarables.d.ts +54 -0
- package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
- package/dist/builder/scanner/composition/declarables.js +182 -0
- package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
- package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
- package/dist/builder/scanner/composition/match-declarables.js +131 -0
- package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
- package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
- package/dist/builder/scanner/composition/read-composition.js +302 -0
- package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
- package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
- package/dist/builder/scanner/composition/template-elements.js +41 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts +5 -0
- package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point-discovery.js +14 -0
- package/dist/builder/scanner/entry-point.scanner.d.ts +3 -1
- package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
- package/dist/builder/scanner/entry-point.scanner.js +7 -6
- package/dist/builder/scanner/index.d.ts +4 -0
- package/dist/builder/scanner/index.d.ts.map +1 -1
- package/dist/builder/scanner/index.js +2 -0
- package/dist/builder/scanner/input.extractor.d.ts +31 -2
- package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
- package/dist/builder/scanner/input.extractor.js +73 -17
- package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
- package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/pipe.scanner.js +65 -0
- package/dist/builder/scanner/pseudo-states.d.ts +1 -0
- package/dist/builder/scanner/pseudo-states.d.ts.map +1 -1
- package/dist/builder/scanner/pseudo-states.js +1 -1
- package/dist/builder/scanner/scanner.d.ts +27 -3
- package/dist/builder/scanner/scanner.d.ts.map +1 -1
- package/dist/builder/scanner/scanner.js +68 -24
- package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
- package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
- package/dist/builder/scanner/service/angular-decorators.js +154 -0
- package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
- package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
- package/dist/builder/scanner/service/doc-tags.js +97 -0
- package/dist/builder/scanner/service/export-index.d.ts +18 -0
- package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
- package/dist/builder/scanner/service/export-index.js +22 -0
- package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
- package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/member.extractor.js +216 -0
- package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
- package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
- package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
- package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
- package/dist/builder/scanner/service/service-api.extractor.js +119 -0
- package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
- package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
- package/dist/builder/scanner/service/setup.reader.js +89 -0
- package/dist/builder/scanner/service/type-collector.d.ts +23 -0
- package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
- package/dist/builder/scanner/service/type-collector.js +210 -0
- package/dist/builder/scanner/service.scanner.d.ts +26 -0
- package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
- package/dist/builder/scanner/service.scanner.js +61 -0
- package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
- package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
- package/dist/builder/scanner/showcase-diagnostics.js +123 -10
- package/dist/builder/scanner/showcase-states.d.ts +17 -0
- package/dist/builder/scanner/showcase-states.d.ts.map +1 -0
- package/dist/builder/scanner/showcase-states.js +58 -0
- package/dist/builder/scanner/source-file-cache.d.ts +26 -0
- package/dist/builder/scanner/source-file-cache.d.ts.map +1 -0
- package/dist/builder/scanner/source-file-cache.js +60 -0
- package/dist/builder/shared/prism-pipeline.d.ts +6 -0
- package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
- package/dist/builder/shared/prism-pipeline.js +71 -18
- package/dist/decorator/index.d.ts +1 -1
- package/dist/decorator/index.d.ts.map +1 -1
- package/dist/decorator/showcase.types.d.ts +102 -9
- package/dist/decorator/showcase.types.d.ts.map +1 -1
- package/dist/plugin/index.d.ts +6 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +4 -0
- package/dist/plugin/pipe.types.d.ts +36 -0
- package/dist/plugin/pipe.types.d.ts.map +1 -0
- package/dist/plugin/pipe.types.js +1 -0
- package/dist/plugin/plugin.types.d.ts +184 -8
- package/dist/plugin/plugin.types.d.ts.map +1 -1
- package/dist/plugin/service.types.d.ts +124 -0
- package/dist/plugin/service.types.d.ts.map +1 -0
- package/dist/plugin/service.types.js +1 -0
- package/dist/plugin/status.d.ts +27 -0
- package/dist/plugin/status.d.ts.map +1 -0
- package/dist/plugin/status.js +26 -0
- package/dist/shared/composition.d.ts +30 -0
- package/dist/shared/composition.d.ts.map +1 -0
- package/dist/shared/composition.js +29 -0
- package/dist/shared/pseudo-state.type.d.ts +2 -1
- package/dist/shared/pseudo-state.type.d.ts.map +1 -1
- package/dist/shared/void-elements.d.ts +3 -0
- package/dist/shared/void-elements.d.ts.map +1 -0
- package/dist/shared/void-elements.js +2 -0
- package/package.json +1 -1
- package/src/builder/build/schema.json +6 -6
- package/src/builder/serve/schema.json +6 -6
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { getClassChain } from '../class-hierarchy.js';
|
|
3
|
+
import { isDocumented, readDescription, readDocTags } from './doc-tags.js';
|
|
4
|
+
import { extractMethod } from './member.extractor.js';
|
|
5
|
+
import { describeSetupEntries } from './service-api.extractor.js';
|
|
6
|
+
import { createTypeCollector } from './type-collector.js';
|
|
7
|
+
/**
|
|
8
|
+
* What the API page of a pipe shows: the description and tags of the class,
|
|
9
|
+
* the signatures of `transform()`, its setup functions and tokens with their
|
|
10
|
+
* config tables, and every documented type all of them reach. A template only
|
|
11
|
+
* calls `transform()`: no other member is read, and none adds a type.
|
|
12
|
+
*/
|
|
13
|
+
export function extractPipeApi(classDecl, setupRefs, checker, exportIndex) {
|
|
14
|
+
const collector = createTypeCollector(checker, exportIndex);
|
|
15
|
+
const transform = extractTransform(classDecl, checker, collector);
|
|
16
|
+
const setup = describeSetupEntries(setupRefs, checker, collector);
|
|
17
|
+
const api = { tags: readDocTags(classDecl), transform, setup, types: collector.drain() };
|
|
18
|
+
// The class's own block only: unlike a member, a pipe does not take the description of its base class.
|
|
19
|
+
const description = readDescription(classDecl);
|
|
20
|
+
if (description)
|
|
21
|
+
api.description = description;
|
|
22
|
+
return api;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The signatures of `transform()` in the nearest class that declares it,
|
|
26
|
+
* which may be a base class that only exists as a declaration, such as
|
|
27
|
+
* `DatePipe` in the .d.ts of `@angular/common`: its overload signatures, or
|
|
28
|
+
* the one declaration when there are none. The implementation of overloads is
|
|
29
|
+
* not one a template can call. In a .d.ts every declaration is a signature.
|
|
30
|
+
*
|
|
31
|
+
* A signature without a doc block of its own takes the one of the
|
|
32
|
+
* implementation, then of the first documented signature of the same class,
|
|
33
|
+
* then of the first documented `transform()` of the nearest base class that has one.
|
|
34
|
+
* The implementation and a base class document the method as a whole, so all
|
|
35
|
+
* of their block is taken. Another signature's block is about that signature:
|
|
36
|
+
* its description and `@param` texts are taken, its tags are not, since an
|
|
37
|
+
* overload marked `@deprecated` does not deprecate the one that replaces it.
|
|
38
|
+
*/
|
|
39
|
+
function extractTransform(classDecl, checker, types) {
|
|
40
|
+
const levels = getClassChain(classDecl, checker).map(getTransformDeclarations);
|
|
41
|
+
const level = levels.findIndex((declarations) => declarations.length > 0);
|
|
42
|
+
if (level < 0)
|
|
43
|
+
return [];
|
|
44
|
+
const declarations = levels[level];
|
|
45
|
+
const signatures = declarations.filter((declaration) => !declaration.body);
|
|
46
|
+
const implementation = declarations.find((declaration) => declaration.body && isDocumented(declaration));
|
|
47
|
+
const sibling = signatures.find(isDocumented);
|
|
48
|
+
const fallback = implementation ?? sibling ?? findInheritedDocs(levels.slice(level + 1));
|
|
49
|
+
return (signatures.length > 0 ? signatures : declarations).map((signature) => {
|
|
50
|
+
const docs = isDocumented(signature) ? signature : (fallback ?? signature);
|
|
51
|
+
const method = extractMethod('transform', signature, docs, checker, types);
|
|
52
|
+
if (docs !== signature && docs === sibling)
|
|
53
|
+
method.tags = {};
|
|
54
|
+
return method;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** The instance declarations of `transform()` in a class, in source order: the overload signatures and the implementation. */
|
|
58
|
+
function getTransformDeclarations(classDecl) {
|
|
59
|
+
return classDecl.members.filter((member) => ts.isMethodDeclaration(member) &&
|
|
60
|
+
(ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) &&
|
|
61
|
+
member.name.text === 'transform' &&
|
|
62
|
+
!ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword));
|
|
63
|
+
}
|
|
64
|
+
/** The first documented `transform()` declaration in the nearest of the given base classes that has one. */
|
|
65
|
+
function findInheritedDocs(levels) {
|
|
66
|
+
for (const declarations of levels) {
|
|
67
|
+
const documented = declarations.find(isDocumented);
|
|
68
|
+
if (documented)
|
|
69
|
+
return documented;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ApiSetupEntry, ServiceApi } from '../../../plugin/service.types.js';
|
|
3
|
+
import type { ExportIndex } from './export-index.js';
|
|
4
|
+
import { type SetupRef } from './setup.reader.js';
|
|
5
|
+
import { type TypeCollector } from './type-collector.js';
|
|
6
|
+
/**
|
|
7
|
+
* What the API page of a service shows: the description and tags of the
|
|
8
|
+
* class, its public members, its setup functions and tokens with their config
|
|
9
|
+
* tables, and every documented type all of them reach.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractServiceApi(classDecl: ts.ClassDeclaration, setupRefs: SetupRef[], checker: ts.TypeChecker, exportIndex: ExportIndex): ServiceApi;
|
|
12
|
+
/** The setup functions and tokens of a service or a pipe, with their config tables; the types they reach go to `collector`. */
|
|
13
|
+
export declare function describeSetupEntries(setupRefs: SetupRef[], checker: ts.TypeChecker, collector: TypeCollector): ApiSetupEntry[];
|
|
14
|
+
//# sourceMappingURL=service-api.extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-api.extractor.d.ts","sourceRoot":"","sources":["../../../../src/builder/scanner/service/service-api.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAe,aAAa,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,QAAQ,EAAmB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAK9E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,UAAU,CAUtJ;AAED,+HAA+H;AAC/H,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,GAAG,aAAa,EAAE,CAE9H"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { readDescription, readDocTags } from './doc-tags.js';
|
|
3
|
+
import { extractMembers, extractMethod, extractObjectTypeMembers, firstParameter } from './member.extractor.js';
|
|
4
|
+
import { skipParentheses } from './setup.reader.js';
|
|
5
|
+
import { createTypeCollector } from './type-collector.js';
|
|
6
|
+
/** The wrappers a config table looks through. */
|
|
7
|
+
const CONFIG_WRAPPERS = new Set(['Partial', 'Required', 'Readonly']);
|
|
8
|
+
/**
|
|
9
|
+
* What the API page of a service shows: the description and tags of the
|
|
10
|
+
* class, its public members, its setup functions and tokens with their config
|
|
11
|
+
* tables, and every documented type all of them reach.
|
|
12
|
+
*/
|
|
13
|
+
export function extractServiceApi(classDecl, setupRefs, checker, exportIndex) {
|
|
14
|
+
const collector = createTypeCollector(checker, exportIndex);
|
|
15
|
+
const { properties, methods } = extractMembers(classDecl, checker, collector);
|
|
16
|
+
const setup = describeSetupEntries(setupRefs, checker, collector);
|
|
17
|
+
const api = { tags: readDocTags(classDecl), properties, methods, setup, types: collector.drain() };
|
|
18
|
+
const description = readDescription(classDecl);
|
|
19
|
+
if (description)
|
|
20
|
+
api.description = description;
|
|
21
|
+
return api;
|
|
22
|
+
}
|
|
23
|
+
/** The setup functions and tokens of a service or a pipe, with their config tables; the types they reach go to `collector`. */
|
|
24
|
+
export function describeSetupEntries(setupRefs, checker, collector) {
|
|
25
|
+
return setupRefs.map((ref) => (ref.kind === 'function' ? describeSetupFunction(ref, checker, collector) : describeSetupToken(ref, checker, collector)));
|
|
26
|
+
}
|
|
27
|
+
/** A setup function: its signature and docs, and the options of its first parameter when that is an object. */
|
|
28
|
+
function describeSetupFunction({ name, declaration, importPath }, checker, collector) {
|
|
29
|
+
const fn = ts.isFunctionDeclaration(declaration) ? declaration : skipParentheses(declaration.initializer);
|
|
30
|
+
const { params, returnType, description, tags } = extractMethod(name, fn, docNodeOf(declaration), checker, collector);
|
|
31
|
+
const entry = { name, kind: 'function', importPath, tags, params, returnType };
|
|
32
|
+
const param = firstParameter(fn);
|
|
33
|
+
const config = param && readConfig(param.type, checker.getTypeAtLocation(param), checker, collector.within(params[0].name));
|
|
34
|
+
if (description)
|
|
35
|
+
entry.description = description;
|
|
36
|
+
if (config)
|
|
37
|
+
entry.config = config;
|
|
38
|
+
return entry;
|
|
39
|
+
}
|
|
40
|
+
/** A token: `InjectionToken<T>` as written, and the options of `T` when that is an object. */
|
|
41
|
+
function describeSetupToken({ name, declaration, importPath }, checker, collector) {
|
|
42
|
+
// A token is always a `const`: the setup reader takes no other declaration for one.
|
|
43
|
+
const variable = declaration;
|
|
44
|
+
const typeNode = variable.type;
|
|
45
|
+
const type = checker.getTypeAtLocation(variable.name);
|
|
46
|
+
const docs = docNodeOf(variable);
|
|
47
|
+
const entry = {
|
|
48
|
+
name,
|
|
49
|
+
kind: 'token',
|
|
50
|
+
importPath,
|
|
51
|
+
tags: readDocTags(docs),
|
|
52
|
+
tokenType: collector.ref(typeNode, type, `type of ${name}`, { kind: 'property', name })
|
|
53
|
+
};
|
|
54
|
+
const argumentNode = typeNode && ts.isTypeReferenceNode(typeNode) ? typeNode.typeArguments?.[0] : undefined;
|
|
55
|
+
const argument = argumentNode ? checker.getTypeFromTypeNode(argumentNode) : isTypeReference(type) ? checker.getTypeArguments(type)[0] : undefined;
|
|
56
|
+
const config = argument && readConfig(argumentNode, argument, checker, collector.within(name));
|
|
57
|
+
const description = readDescription(docs);
|
|
58
|
+
if (description)
|
|
59
|
+
entry.description = description;
|
|
60
|
+
if (config)
|
|
61
|
+
entry.config = config;
|
|
62
|
+
return entry;
|
|
63
|
+
}
|
|
64
|
+
/** The doc block of a `const` sits on its statement, not on the declaration. */
|
|
65
|
+
function docNodeOf(declaration) {
|
|
66
|
+
return ts.isVariableDeclaration(declaration) && ts.isVariableStatement(declaration.parent.parent) ? declaration.parent.parent : declaration;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The options of a config object: the properties of an interface, an object
|
|
70
|
+
* literal type or an object type alias, looked for through `Partial`,
|
|
71
|
+
* `Required` and `Readonly`, which change what the options say. `undefined`
|
|
72
|
+
* for anything else, a class or an array or a primitive.
|
|
73
|
+
*/
|
|
74
|
+
function readConfig(typeNode, type, checker, types) {
|
|
75
|
+
const wrappers = [];
|
|
76
|
+
let node = typeNode;
|
|
77
|
+
// The type as annotated: the parameter's own type has `undefined` in it when the parameter is optional.
|
|
78
|
+
let current = node ? checker.getTypeFromTypeNode(node) : checker.getNonNullableType(type);
|
|
79
|
+
// Through the annotation where there is one, through the alias the checker keeps otherwise.
|
|
80
|
+
for (;;) {
|
|
81
|
+
if (node && ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && CONFIG_WRAPPERS.has(node.typeName.text) && node.typeArguments?.length === 1) {
|
|
82
|
+
wrappers.push(node.typeName.text);
|
|
83
|
+
node = node.typeArguments[0];
|
|
84
|
+
current = checker.getTypeFromTypeNode(node);
|
|
85
|
+
}
|
|
86
|
+
else if (!node && current.aliasSymbol && CONFIG_WRAPPERS.has(current.aliasSymbol.name) && current.aliasTypeArguments?.length === 1) {
|
|
87
|
+
wrappers.push(current.aliasSymbol.name);
|
|
88
|
+
current = current.aliasTypeArguments[0];
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (!isConfigObject(current, checker))
|
|
95
|
+
return undefined;
|
|
96
|
+
const { properties } = extractObjectTypeMembers(current, checker, types);
|
|
97
|
+
// The innermost wrapper first: `Partial<Required<T>>` leaves every option optional.
|
|
98
|
+
for (const wrapper of wrappers.reverse())
|
|
99
|
+
properties.forEach((option) => applyWrapper(wrapper, option));
|
|
100
|
+
return properties.length > 0 ? properties : undefined;
|
|
101
|
+
}
|
|
102
|
+
function applyWrapper(wrapper, option) {
|
|
103
|
+
if (wrapper === 'Partial')
|
|
104
|
+
option.optional = true;
|
|
105
|
+
else if (wrapper === 'Required')
|
|
106
|
+
delete option.optional;
|
|
107
|
+
else
|
|
108
|
+
option.readonly = true;
|
|
109
|
+
}
|
|
110
|
+
function isConfigObject(type, checker) {
|
|
111
|
+
if (type.isIntersection())
|
|
112
|
+
return type.types.every((part) => isConfigObject(part, checker));
|
|
113
|
+
if (!(type.flags & ts.TypeFlags.Object) || type.objectFlags & ts.ObjectFlags.Class)
|
|
114
|
+
return false;
|
|
115
|
+
return !checker.isArrayType(type) && !checker.isTupleType(type) && type.getCallSignatures().length === 0;
|
|
116
|
+
}
|
|
117
|
+
function isTypeReference(type) {
|
|
118
|
+
return !!(type.flags & ts.TypeFlags.Object) && !!(type.objectFlags & ts.ObjectFlags.Reference);
|
|
119
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ExportIndex } from './export-index.js';
|
|
3
|
+
/** One entry of a service's `setup`: what the styleguide shows to configure the service, and where to import it from. */
|
|
4
|
+
export interface SetupRef {
|
|
5
|
+
name: string;
|
|
6
|
+
kind: 'function' | 'token';
|
|
7
|
+
declaration: ts.FunctionDeclaration | ts.VariableDeclaration;
|
|
8
|
+
importPath: string;
|
|
9
|
+
}
|
|
10
|
+
/** Only the literal: a `setup` that arrives through a spread or a constant is not found, and dropped without a word. */
|
|
11
|
+
export declare function findSetupProperty(showcaseArg: ts.Expression): ts.ObjectLiteralElementLike | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Read the functions and tokens a service names in `setup: () => [provideToast, TOAST_LABELS]`.
|
|
14
|
+
*
|
|
15
|
+
* `setup` is an arrow function, not an array, so that the imports it refers to
|
|
16
|
+
* are only touched when it runs: a showcase file that imports from a module
|
|
17
|
+
* which imports the service back would otherwise hit the temporal dead zone.
|
|
18
|
+
* The scanner never runs it. It reads the array literal in the source and
|
|
19
|
+
* traces each element to its declaration, and to the entry point that exports it.
|
|
20
|
+
*
|
|
21
|
+
* What cannot be read is reported and dropped: a `setup` of another shape as a
|
|
22
|
+
* whole, any other entry on its own.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readSetupRefs(showcaseArg: ts.Expression, className: string, checker: ts.TypeChecker, exportIndex: ExportIndex, report: (message: string) => void): SetupRef[];
|
|
25
|
+
export declare function skipParentheses(expression: ts.Expression): ts.Expression;
|
|
26
|
+
//# sourceMappingURL=setup.reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.reader.d.ts","sourceRoot":"","sources":["../../../../src/builder/scanner/service/setup.reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,yHAAyH;AACzH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,WAAW,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wHAAwH;AACxH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,wBAAwB,GAAG,SAAS,CAIrG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CACzB,WAAW,EAAE,EAAE,CAAC,UAAU,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,QAAQ,EAAE,CAkCZ;AAaD,wBAAgB,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAKxE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { describeInvalidSetup, describeSetupEntryNotExported, describeSetupEntryNotSupported } from '../showcase-diagnostics.js';
|
|
3
|
+
/** Only the literal: a `setup` that arrives through a spread or a constant is not found, and dropped without a word. */
|
|
4
|
+
export function findSetupProperty(showcaseArg) {
|
|
5
|
+
if (!ts.isObjectLiteralExpression(showcaseArg))
|
|
6
|
+
return undefined;
|
|
7
|
+
return showcaseArg.properties.find((p) => p.name !== undefined && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) && p.name.text === 'setup');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Read the functions and tokens a service names in `setup: () => [provideToast, TOAST_LABELS]`.
|
|
11
|
+
*
|
|
12
|
+
* `setup` is an arrow function, not an array, so that the imports it refers to
|
|
13
|
+
* are only touched when it runs: a showcase file that imports from a module
|
|
14
|
+
* which imports the service back would otherwise hit the temporal dead zone.
|
|
15
|
+
* The scanner never runs it. It reads the array literal in the source and
|
|
16
|
+
* traces each element to its declaration, and to the entry point that exports it.
|
|
17
|
+
*
|
|
18
|
+
* What cannot be read is reported and dropped: a `setup` of another shape as a
|
|
19
|
+
* whole, any other entry on its own.
|
|
20
|
+
*/
|
|
21
|
+
export function readSetupRefs(showcaseArg, className, checker, exportIndex, report) {
|
|
22
|
+
const property = findSetupProperty(showcaseArg);
|
|
23
|
+
if (!property)
|
|
24
|
+
return [];
|
|
25
|
+
const array = ts.isPropertyAssignment(property) ? readSetupArray(property.initializer) : undefined;
|
|
26
|
+
if (!array) {
|
|
27
|
+
report(describeInvalidSetup(className, ts.isPropertyAssignment(property) ? property.initializer : property));
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const refs = [];
|
|
31
|
+
array.elements.forEach((element, index) => {
|
|
32
|
+
const symbol = resolveEntry(element, checker);
|
|
33
|
+
const target = symbol && classifyEntry(symbol, checker);
|
|
34
|
+
if (!symbol || !target) {
|
|
35
|
+
report(describeSetupEntryNotSupported(className, index, element));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const importPath = exportIndex.get(symbol);
|
|
39
|
+
if (importPath === undefined) {
|
|
40
|
+
report(describeSetupEntryNotExported(className, index, element));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
refs.push({ name: symbol.name, ...target, importPath });
|
|
44
|
+
});
|
|
45
|
+
return refs;
|
|
46
|
+
}
|
|
47
|
+
/** The array literal an arrow function returns, as an expression body or as the only statement of a block. */
|
|
48
|
+
function readSetupArray(initializer) {
|
|
49
|
+
if (!ts.isArrowFunction(initializer))
|
|
50
|
+
return undefined;
|
|
51
|
+
const { body } = initializer;
|
|
52
|
+
const returned = ts.isBlock(body) ? (body.statements.length === 1 && ts.isReturnStatement(body.statements[0]) ? body.statements[0].expression : undefined) : body;
|
|
53
|
+
const value = returned && skipParentheses(returned);
|
|
54
|
+
return value && ts.isArrayLiteralExpression(value) ? value : undefined;
|
|
55
|
+
}
|
|
56
|
+
export function skipParentheses(expression) {
|
|
57
|
+
let current = expression;
|
|
58
|
+
while (ts.isParenthesizedExpression(current))
|
|
59
|
+
current = current.expression;
|
|
60
|
+
return current;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The declaration symbol an entry refers to, with an import followed to its
|
|
64
|
+
* source: the symbol the export index holds. Only a name or a property access
|
|
65
|
+
* (`toasts.provideToast`) can refer to one; a call or a spread cannot.
|
|
66
|
+
*/
|
|
67
|
+
function resolveEntry(element, checker) {
|
|
68
|
+
if (!ts.isIdentifier(element) && !ts.isPropertyAccessExpression(element))
|
|
69
|
+
return undefined;
|
|
70
|
+
const symbol = checker.getSymbolAtLocation(element);
|
|
71
|
+
if (!symbol)
|
|
72
|
+
return undefined;
|
|
73
|
+
// A declaration that is exported from its own file is a local symbol there, and the export symbol is the one that is indexed.
|
|
74
|
+
return checker.getExportSymbolOfSymbol(symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol);
|
|
75
|
+
}
|
|
76
|
+
function classifyEntry(symbol, checker) {
|
|
77
|
+
for (const declaration of symbol.declarations ?? []) {
|
|
78
|
+
if (ts.isFunctionDeclaration(declaration))
|
|
79
|
+
return { kind: 'function', declaration };
|
|
80
|
+
if (!ts.isVariableDeclaration(declaration) || !(ts.getCombinedNodeFlags(declaration) & ts.NodeFlags.Const))
|
|
81
|
+
continue;
|
|
82
|
+
const initializer = declaration.initializer && skipParentheses(declaration.initializer);
|
|
83
|
+
if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)))
|
|
84
|
+
return { kind: 'function', declaration };
|
|
85
|
+
if (checker.getTypeAtLocation(declaration.name).getSymbol()?.name === 'InjectionToken')
|
|
86
|
+
return { kind: 'token', declaration };
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ApiTypeDoc } from '../../../plugin/service.types.js';
|
|
3
|
+
import type { ExportIndex } from './export-index.js';
|
|
4
|
+
import { type TypeRefResolver } from './member.extractor.js';
|
|
5
|
+
/** A {@link TypeRefResolver} that links the documented types it meets and collects them for `ServiceApi.types`. */
|
|
6
|
+
export interface TypeCollector extends TypeRefResolver {
|
|
7
|
+
/** A resolver for the members of the value at `path`, e.g. the options of a setup function's `config`. */
|
|
8
|
+
within(path: string): TypeRefResolver;
|
|
9
|
+
/** Documents what was reached so far, and what their members reach in turn, in the order of first reach. */
|
|
10
|
+
drain(): ApiTypeDoc[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Collects the types a service's API reaches. A type is documented when it is
|
|
14
|
+
* an interface, class, type alias or enum, a scanned entry point exports it,
|
|
15
|
+
* and it is not tagged `@internal`. Anything else, `Signal` or `Provider` or a
|
|
16
|
+
* type the library keeps to itself, stays text without a link.
|
|
17
|
+
*
|
|
18
|
+
* Each type is documented once, under the id it got when it was first
|
|
19
|
+
* reached: its name, or `${name}@${importPath}` when a type of that name was
|
|
20
|
+
* reached before. That also ends a type that refers to itself.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createTypeCollector(checker: ts.TypeChecker, exportIndex: ExportIndex): TypeCollector;
|
|
23
|
+
//# sourceMappingURL=type-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-collector.d.ts","sourceRoot":"","sources":["../../../../src/builder/scanner/service/type-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAA0B,UAAU,EAAc,MAAM,kCAAkC,CAAC;AAEvG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAA8E,KAAK,eAAe,EAAiB,MAAM,uBAAuB,CAAC;AAexJ,mHAAmH;AACnH,MAAM,WAAW,aAAc,SAAQ,eAAe;IAClD,0GAA0G;IAC1G,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,4GAA4G;IAC5G,KAAK,IAAI,UAAU,EAAE,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,aAAa,CAqGpG"}
|
|
@@ -0,0 +1,210 @@
|
|
|
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 a service's API reaches. A type is documented when it is
|
|
6
|
+
* an interface, class, type alias or enum, a scanned entry point exports it,
|
|
7
|
+
* and it is not tagged `@internal`. Anything else, `Signal` or `Provider` or a
|
|
8
|
+
* type the library keeps to itself, stays text without a link.
|
|
9
|
+
*
|
|
10
|
+
* Each type is documented once, under the id it got when it was first
|
|
11
|
+
* reached: its name, or `${name}@${importPath}` when a type of that name was
|
|
12
|
+
* reached before. That also ends a type that refers to itself.
|
|
13
|
+
*/
|
|
14
|
+
export function createTypeCollector(checker, exportIndex) {
|
|
15
|
+
/** Every symbol met so far: what it was reached as, or `null` when it is not documented. */
|
|
16
|
+
const reached = new Map();
|
|
17
|
+
const ids = new Set();
|
|
18
|
+
const queue = [];
|
|
19
|
+
const docs = [];
|
|
20
|
+
function collect(typeNode, type, reachedFrom, path) {
|
|
21
|
+
const links = [];
|
|
22
|
+
const visit = (symbol) => {
|
|
23
|
+
const target = reach(symbol, reachedFrom, path);
|
|
24
|
+
if (target && !links.includes(target.id))
|
|
25
|
+
links.push(target.id);
|
|
26
|
+
};
|
|
27
|
+
if (typeNode)
|
|
28
|
+
forEachReferenceInNode(typeNode, checker, visit);
|
|
29
|
+
else
|
|
30
|
+
forEachReferenceInType(type, checker, visit, new Set());
|
|
31
|
+
const text = readTypeText(checker, typeNode, type);
|
|
32
|
+
return links.length > 0 ? { text, links } : { text };
|
|
33
|
+
}
|
|
34
|
+
function reach(symbol, reachedFrom, path) {
|
|
35
|
+
const target = resolveSymbol(symbol, checker);
|
|
36
|
+
const known = reached.get(target);
|
|
37
|
+
if (known !== undefined)
|
|
38
|
+
return known ?? undefined;
|
|
39
|
+
const declaration = target.declarations?.find(isDocumentedKind);
|
|
40
|
+
const importPath = exportIndex.get(target);
|
|
41
|
+
if (!declaration || importPath === undefined || isInternal(declaration)) {
|
|
42
|
+
reached.set(target, null);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const id = ids.has(target.name) ? `${target.name}@${importPath}` : target.name;
|
|
46
|
+
const entry = { id, symbol: target, declaration, importPath, reachedFrom, path: path ?? target.name };
|
|
47
|
+
ids.add(id);
|
|
48
|
+
reached.set(target, entry);
|
|
49
|
+
queue.push(entry);
|
|
50
|
+
return entry;
|
|
51
|
+
}
|
|
52
|
+
function within(owner) {
|
|
53
|
+
return {
|
|
54
|
+
ref(typeNode, type, reachedFrom, site) {
|
|
55
|
+
switch (site?.kind) {
|
|
56
|
+
case 'property':
|
|
57
|
+
return collect(typeNode, type, `via ${owner}.${site.name}`, `${owner}.${site.name}`);
|
|
58
|
+
case 'parameter':
|
|
59
|
+
return collect(typeNode, type, `parameter of ${owner}.${site.method}()`, site.name);
|
|
60
|
+
case 'return':
|
|
61
|
+
return collect(typeNode, type, `returned by ${owner}.${site.method}()`, `${owner}.${site.method}()`);
|
|
62
|
+
default:
|
|
63
|
+
return collect(typeNode, type, `via ${owner}`, owner);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function describe({ id, symbol, declaration, importPath, reachedFrom, path }) {
|
|
69
|
+
const doc = { id, name: symbol.name, kind: kindOf(declaration), importPath, tags: readDocTags(declaration) };
|
|
70
|
+
const description = readDescription(declaration);
|
|
71
|
+
const members = within(path);
|
|
72
|
+
if (description)
|
|
73
|
+
doc.description = description;
|
|
74
|
+
if (ts.isClassDeclaration(declaration)) {
|
|
75
|
+
assignMembers(doc, extractMembers(declaration, checker, members));
|
|
76
|
+
}
|
|
77
|
+
else if (ts.isInterfaceDeclaration(declaration)) {
|
|
78
|
+
assignMembers(doc, extractObjectTypeMembers(checker.getDeclaredTypeOfSymbol(symbol), checker, members));
|
|
79
|
+
}
|
|
80
|
+
else if (ts.isEnumDeclaration(declaration)) {
|
|
81
|
+
doc.members = declaration.members.filter((member) => !isInternal(member)).map((member) => describeEnumMember(member, checker));
|
|
82
|
+
}
|
|
83
|
+
else if (isLiteralUnion(declaration.type)) {
|
|
84
|
+
doc.union = declaration.type.types.map((member) => member.getText());
|
|
85
|
+
}
|
|
86
|
+
else if (ts.isTypeLiteralNode(declaration.type)) {
|
|
87
|
+
assignMembers(doc, extractObjectTypeMembers(checker.getDeclaredTypeOfSymbol(symbol), checker, members));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// The text has no links of its own, but the types it names are reached all the same.
|
|
91
|
+
doc.text = collect(declaration.type, checker.getDeclaredTypeOfSymbol(symbol), `via ${path}`, path).text;
|
|
92
|
+
}
|
|
93
|
+
doc.reachedFrom = reachedFrom;
|
|
94
|
+
return doc;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
ref: (typeNode, type, reachedFrom, site) => collect(typeNode, type, reachedFrom, site && pathOf(site)),
|
|
98
|
+
within,
|
|
99
|
+
drain() {
|
|
100
|
+
// Describing a type reaches the types of its members, which join the queue behind it.
|
|
101
|
+
while (docs.length < queue.length)
|
|
102
|
+
docs.push(describe(queue[docs.length]));
|
|
103
|
+
return [...docs];
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** 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. */
|
|
108
|
+
function pathOf(site) {
|
|
109
|
+
return site.kind === 'return' ? `${site.method}()` : site.name;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The declaration a reference ends at: an import followed to its source, the
|
|
113
|
+
* export symbol of a declaration exported from its own file, an enum for one
|
|
114
|
+
* of its members. That is the symbol the export index holds.
|
|
115
|
+
*/
|
|
116
|
+
function resolveSymbol(symbol, checker) {
|
|
117
|
+
let target = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
|
|
118
|
+
if (target.flags & ts.SymbolFlags.EnumMember && target.valueDeclaration && ts.isEnumDeclaration(target.valueDeclaration.parent)) {
|
|
119
|
+
target = checker.getSymbolAtLocation(target.valueDeclaration.parent.name) ?? target;
|
|
120
|
+
}
|
|
121
|
+
return checker.getExportSymbolOfSymbol(target);
|
|
122
|
+
}
|
|
123
|
+
function isDocumentedKind(declaration) {
|
|
124
|
+
return ts.isInterfaceDeclaration(declaration) || ts.isClassDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration) || ts.isEnumDeclaration(declaration);
|
|
125
|
+
}
|
|
126
|
+
function kindOf(declaration) {
|
|
127
|
+
if (ts.isInterfaceDeclaration(declaration))
|
|
128
|
+
return 'interface';
|
|
129
|
+
if (ts.isClassDeclaration(declaration))
|
|
130
|
+
return 'class';
|
|
131
|
+
if (ts.isEnumDeclaration(declaration))
|
|
132
|
+
return 'enum';
|
|
133
|
+
return 'type';
|
|
134
|
+
}
|
|
135
|
+
/** `'top-left' | 'top-right'`, `1 | 2` or `true | null`: a union of literals only. */
|
|
136
|
+
function isLiteralUnion(node) {
|
|
137
|
+
return ts.isUnionTypeNode(node) && node.types.every(ts.isLiteralTypeNode);
|
|
138
|
+
}
|
|
139
|
+
function assignMembers(doc, { properties, methods }) {
|
|
140
|
+
if (properties.length > 0)
|
|
141
|
+
doc.properties = properties;
|
|
142
|
+
if (methods.length > 0)
|
|
143
|
+
doc.methods = methods;
|
|
144
|
+
}
|
|
145
|
+
/** The initializer as written, or the value TypeScript counts up to without one. */
|
|
146
|
+
function describeEnumMember(member, checker) {
|
|
147
|
+
const result = {
|
|
148
|
+
name: ts.isIdentifier(member.name) || ts.isStringLiteral(member.name) ? member.name.text : member.name.getText()
|
|
149
|
+
};
|
|
150
|
+
const value = member.initializer ? collapseWhitespace(member.initializer.getText()) : checker.getConstantValue(member)?.toString();
|
|
151
|
+
const description = readDescription(member);
|
|
152
|
+
if (value !== undefined)
|
|
153
|
+
result.value = value;
|
|
154
|
+
if (description)
|
|
155
|
+
result.description = description;
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
/** Every type reference in an annotation: in type arguments, arrays, unions and object literal types too. */
|
|
159
|
+
function forEachReferenceInNode(node, checker, visit) {
|
|
160
|
+
if (ts.isTypeReferenceNode(node)) {
|
|
161
|
+
const symbol = checker.getSymbolAtLocation(ts.isQualifiedName(node.typeName) ? node.typeName.right : node.typeName);
|
|
162
|
+
if (symbol)
|
|
163
|
+
visit(symbol);
|
|
164
|
+
}
|
|
165
|
+
ts.forEachChild(node, (child) => forEachReferenceInNode(child, checker, visit));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Every named type in a type without annotation, as `typeToString` prints it:
|
|
169
|
+
* an alias or a class or interface with their type arguments, the parts of a
|
|
170
|
+
* union or intersection, and the members of an object literal or function type.
|
|
171
|
+
*/
|
|
172
|
+
function forEachReferenceInType(type, checker, visit, seen) {
|
|
173
|
+
if (seen.has(type))
|
|
174
|
+
return;
|
|
175
|
+
seen.add(type);
|
|
176
|
+
const walk = (inner) => forEachReferenceInType(inner, checker, visit, seen);
|
|
177
|
+
if (type.aliasSymbol) {
|
|
178
|
+
visit(type.aliasSymbol);
|
|
179
|
+
type.aliasTypeArguments?.forEach(walk);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// An enum, or one of its members.
|
|
183
|
+
if (type.flags & ts.TypeFlags.EnumLiteral && type.symbol) {
|
|
184
|
+
visit(type.symbol);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (type.isUnionOrIntersection()) {
|
|
188
|
+
type.types.forEach(walk);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!(type.flags & ts.TypeFlags.Object))
|
|
192
|
+
return;
|
|
193
|
+
const { objectFlags } = type;
|
|
194
|
+
if (objectFlags & (ts.ObjectFlags.Class | ts.ObjectFlags.Interface | ts.ObjectFlags.Reference)) {
|
|
195
|
+
if (type.symbol)
|
|
196
|
+
visit(type.symbol);
|
|
197
|
+
if (objectFlags & ts.ObjectFlags.Reference)
|
|
198
|
+
checker.getTypeArguments(type).forEach(walk);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (objectFlags & ts.ObjectFlags.Anonymous) {
|
|
202
|
+
for (const property of type.getProperties())
|
|
203
|
+
walk(checker.getTypeOfSymbol(property));
|
|
204
|
+
for (const signature of type.getCallSignatures()) {
|
|
205
|
+
for (const parameter of signature.getParameters())
|
|
206
|
+
walk(checker.getTypeOfSymbol(parameter));
|
|
207
|
+
walk(signature.getReturnType());
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ShowcaseConfig } from '../../decorator/showcase.types.js';
|
|
3
|
+
import type { ScannedService } from '../../plugin/service.types.js';
|
|
4
|
+
import type { ExportIndex } from './api/export-index.js';
|
|
5
|
+
import { type ShowcasedClass } from './component.scanner.js';
|
|
6
|
+
export interface ScanServicesOptions {
|
|
7
|
+
/** Built from every entry point of the library, since a setup function or a type is often exported by another one than the service. */
|
|
8
|
+
exportIndex: ExportIndex;
|
|
9
|
+
/** Shared with {@link scanComponents}, and across entry points, so that a service exported from several of them does not repeat its warnings. */
|
|
10
|
+
diagnostics: string[];
|
|
11
|
+
notices: Set<string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Read the services among the showcased classes of an entry point: classes
|
|
15
|
+
* with `@Injectable` or `@Service`, unless they declare fields only a component
|
|
16
|
+
* can use. Components are left to {@link scanComponents}.
|
|
17
|
+
*
|
|
18
|
+
* Nothing is run and the class is never imported: the service is read from the
|
|
19
|
+
* source, its API from the declarations, its `setup` from the array literal
|
|
20
|
+
* the arrow function returns. A service whose API cannot be read is left out
|
|
21
|
+
* with a notice, so that it does not take the whole scan down.
|
|
22
|
+
*/
|
|
23
|
+
export declare function scanServices(showcased: ShowcasedClass[], checker: ts.TypeChecker, { exportIndex, diagnostics, notices }: ScanServicesOptions): ScannedService[];
|
|
24
|
+
/** `title` and whichever of the service fields the config sets: a component's `variants`, `bg` and the like mean nothing here. */
|
|
25
|
+
export declare function pickServiceFields(config: ShowcaseConfig): ShowcaseConfig;
|
|
26
|
+
//# sourceMappingURL=service.scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/service.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAA0C,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASrG,MAAM,WAAW,mBAAmB;IAChC,uIAAuI;IACvI,WAAW,EAAE,WAAW,CAAC;IACzB,iJAAiJ;IACjJ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAoC/J;AAED,kIAAkI;AAClI,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAQxE"}
|