@@ -6,6 +6,8 @@ import './styles/styles.scss'
6
6
7
7
import * as Components from './components'
8
8
import * as Directives from './directives/exports'
9
+ import type { ComponentType , DirectiveType } from './types/BootstrapVueOptions'
10
+ import parseActiveImports from './utils/parseActiveImports'
9
11
10
12
// Inject all components into the global @vue /runtime-core
11
13
// This allows intellisense in templates w/out direct importing
@@ -118,21 +120,27 @@ declare module '@vue/runtime-core' {
118
120
// Main app plugin
119
121
const plugin : Plugin = {
120
122
install ( app : App , options : BootstrapVueOptions = { components : true , directives : true } ) {
121
- const allComponents = typeof options ?. components === 'boolean' && options ?. components
122
123
const selectedComponents =
123
- typeof options ?. components === 'object' ? options ?. components : undefined
124
- const allDirectives = typeof options ?. directives === 'boolean' && options ?. directives
125
- const selectedDirectives =
126
- typeof options ?. directives === 'object' ? options ?. directives : undefined
127
- Object . entries ( Components ) . forEach ( ( [ name , component ] ) => {
128
- if ( allComponents || selectedComponents ?. [ name as keyof typeof Components ] )
129
- app . component ( name , component )
124
+ typeof options . components === 'boolean' || typeof options . components === 'undefined'
125
+ ? { all : true }
126
+ : options . components
127
+
128
+ const componentKeys = Object . keys ( Components ) as unknown as ComponentType [ ]
129
+ parseActiveImports ( selectedComponents , componentKeys ) . forEach ( ( name ) => {
130
+ const component = Components [ name ]
131
+ app . component ( name , component )
130
132
} )
131
133
132
- Object . entries ( Directives ) . forEach ( ( [ name , component ] ) => {
134
+ const selectedDirectives =
135
+ typeof options ?. directives === 'boolean' || typeof options . directives === 'undefined'
136
+ ? { all : true }
137
+ : options ?. directives
138
+
139
+ const directiveKeys = Object . keys ( Directives ) as unknown as DirectiveType [ ]
140
+ parseActiveImports ( selectedDirectives , directiveKeys ) . forEach ( ( name ) => {
133
141
const parsedName = name . toLowerCase ( ) . startsWith ( 'v' ) ? name . slice ( 1 ) : name
134
- if ( allDirectives || selectedDirectives ?. [ parsedName as keyof typeof Directives ] )
135
- app . directive ( parsedName , component )
142
+ const directive = Directives [ name ]
143
+ app . directive ( parsedName , directive )
136
144
} )
137
145
138
146
if ( options ?. BToast ) app . use ( BToastPlugin , options )
0 commit comments