-
-
Notifications
You must be signed in to change notification settings - Fork 367
/
Copy pathoptions.ts
87 lines (71 loc) · 2.71 KB
/
options.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { join, resolve } from 'path'
import { slash, toArray } from '@antfu/utils'
import { isPackageExists } from 'local-pkg'
import type { ComponentResolver, ComponentResolverObject, Options, ResolvedOptions } from '../types'
import { detectTypeImports } from './type-imports/detect'
export const defaultOptions: Omit<Required<Options>, 'include' | 'exclude' | 'transformer' | 'globs' | 'directives' | 'types'> = {
dirs: 'src/components',
extensions: 'vue',
deep: true,
dts: isPackageExists('typescript'),
directoryAsNamespace: false,
globalNamespaces: [],
resolvers: [],
importPathTransform: v => v,
allowOverrides: false,
}
function normalizeResolvers(resolvers: (ComponentResolver | ComponentResolver[])[]): ComponentResolverObject[] {
return toArray(resolvers).flat().map(r => typeof r === 'function' ? { resolve: r, type: 'component' } : r)
}
export function resolveOptions(options: Options, root: string): ResolvedOptions {
const resolved = Object.assign({}, defaultOptions, options) as ResolvedOptions
resolved.resolvers = normalizeResolvers(resolved.resolvers)
resolved.extensions = toArray(resolved.extensions)
if (resolved.globs) {
resolved.globs = toArray(resolved.globs).map((glob: string) => slash(resolve(root, glob)))
resolved.resolvedDirs = []
}
else {
const extsGlob = resolved.extensions.length === 1
? resolved.extensions
: `{${resolved.extensions.join(',')}}`
resolved.dirs = toArray(resolved.dirs)
resolved.resolvedDirs = resolved.dirs.map(i => slash(resolve(root, i)))
resolved.globs = resolved.resolvedDirs.map(i => resolved.deep
? slash(join(i, `**/*.${extsGlob}`))
: slash(join(i, `*.${extsGlob}`)),
)
if (!resolved.extensions.length)
throw new Error('[unplugin-vue-components] `extensions` option is required to search for components')
}
resolved.dts = !resolved.dts
? false
: resolve(
root,
typeof resolved.dts === 'string'
? resolved.dts
: 'components.d.ts',
)
if (!resolved.types && resolved.dts)
resolved.types = detectTypeImports()
resolved.types = resolved.types || []
resolved.root = root
resolved.transformer = options.transformer || getVueVersion() || 'vue3'
resolved.directives = (typeof options.directives === 'boolean')
? options.directives
: !resolved.resolvers.some(i => i.type === 'directive')
? false
: getVueVersion() === 'vue3'
return resolved
}
function getVueVersion() {
try {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const vue = require('vue')
const version = vue?.default?.version || vue?.version || '3'
return version.startsWith('2.') ? 'vue2' : 'vue3'
}
catch {
return null
}
}