|
1 | 1 | import type { ComponentResolver } from '../../types'
|
2 | 2 |
|
| 3 | +export interface BootstrapVueResolverOptions { |
| 4 | + /** |
| 5 | + * Auto import for directives. |
| 6 | + * |
| 7 | + * @default true |
| 8 | + */ |
| 9 | + directives?: boolean |
| 10 | +} |
| 11 | + |
| 12 | +const COMPONENT_ALIASES: Record<string, string> = { |
| 13 | + BBtn: 'BButton', |
| 14 | + BBtnClose: 'BButtonClose', |
| 15 | + BBtnGroup: 'BButtonGroup', |
| 16 | + BBtnToolbar: 'BButtonToolbar', |
| 17 | + BCheck: 'BFormCheckbox', |
| 18 | + BCheckbox: 'BFormCheckbox', |
| 19 | + BCheckboxGroup: 'BFormCheckboxGroup', |
| 20 | + BCheckGroup: 'BFormCheckboxGroup', |
| 21 | + BDatalist: 'BFormDatalist', |
| 22 | + BDd: 'BDropdown', |
| 23 | + BDdDivider: 'BDropdownDivider', |
| 24 | + BDdForm: 'BDropdownForm', |
| 25 | + BDdGroup: 'BDropdownGroup', |
| 26 | + BDdHeader: 'BDropdownHeader', |
| 27 | + BDdItem: 'BDropdownItem', |
| 28 | + BDdItemButton: 'BDropdownItemButton', |
| 29 | + BDdItemBtn: 'BDropdownItemButton', |
| 30 | + BDdText: 'BDropdownText', |
| 31 | + BDropdownItemBtn: 'BDropdownItemButton', |
| 32 | + BFile: 'BFormFile', |
| 33 | + BFormDatepicker: 'BDatepicker', |
| 34 | + BInput: 'BFormInput', |
| 35 | + BNavDd: 'BNavItemDropdown', |
| 36 | + BNavDropdown: 'BNavItemDropdown', |
| 37 | + BNavItemDd: 'BNavItemDropdown', |
| 38 | + BNavToggle: 'BNavbarToggle', |
| 39 | + BRadio: 'BFormRadio', |
| 40 | + BRadioGroup: 'BFormRadioGroup', |
| 41 | + BRating: 'BFormRating', |
| 42 | + BSelect: 'BFormSelect', |
| 43 | + BSelectOption: 'BFormSelectOption', |
| 44 | + BSelectOptionGroup: 'BFormSelectOptionGroup', |
| 45 | + BSpinbutton: 'BFormSpinbutton', |
| 46 | + BTag: 'BFormTag', |
| 47 | + BTags: 'BFormTags', |
| 48 | + BTextarea: 'BFormTextarea', |
| 49 | + BTimepicker: 'BFormTimepicker', |
| 50 | +} |
| 51 | + |
3 | 52 | /**
|
4 | 53 | * Resolver for BootstrapVue
|
5 | 54 | *
|
6 | 55 | * @link https://github.com/bootstrap-vue/bootstrap-vue
|
7 | 56 | */
|
8 |
| -export function BootstrapVueResolver(): ComponentResolver { |
9 |
| - return { |
| 57 | +export function BootstrapVueResolver(_options: BootstrapVueResolverOptions = {}): ComponentResolver[] { |
| 58 | + const options = { directives: true, ..._options } |
| 59 | + const resolvers: ComponentResolver[] = [{ |
10 | 60 | type: 'component',
|
11 |
| - resolve: (name: string) => { |
12 |
| - if (name.match(/^B[A-Z]/)) |
13 |
| - return { name, from: 'bootstrap-vue' } |
| 61 | + resolve: (name) => { |
| 62 | + if (name.match(/^B[A-Z]/)) { |
| 63 | + return { |
| 64 | + name: COMPONENT_ALIASES[name] || name, |
| 65 | + from: 'bootstrap-vue', |
| 66 | + } |
| 67 | + } |
14 | 68 | },
|
| 69 | + }] |
| 70 | + |
| 71 | + if (options.directives) { |
| 72 | + resolvers.push({ |
| 73 | + type: 'directive', |
| 74 | + resolve: (name) => { |
| 75 | + if (name.match(/^B[A-Z]/)) { |
| 76 | + return { |
| 77 | + name: `V${name}`, |
| 78 | + from: 'bootstrap-vue', |
| 79 | + } |
| 80 | + } |
| 81 | + }, |
| 82 | + }) |
15 | 83 | }
|
| 84 | + |
| 85 | + return resolvers |
16 | 86 | }
|
0 commit comments