@@ -5,13 +5,6 @@ import type { MarkdownEnv } from '../../types.js'
5
5
import { resolvePaths } from './resolvePaths.js'
6
6
7
7
export interface LinksPluginOptions {
8
- /**
9
- * Tag for internal links
10
- *
11
- * @default 'RouteLink'
12
- */
13
- internalTag ?: 'a' | 'RouteLink' | 'RouterLink'
14
-
15
8
/**
16
9
* Additional attributes for external links
17
10
*
@@ -24,6 +17,20 @@ export interface LinksPluginOptions {
24
17
* ```
25
18
*/
26
19
externalAttrs ?: Record < string , string >
20
+
21
+ /**
22
+ * Tag for internal links
23
+ *
24
+ * @default 'RouteLink'
25
+ */
26
+ internalTag ?: 'a' | 'RouteLink' | 'RouterLink'
27
+
28
+ /**
29
+ * Method to check if a link is external
30
+ *
31
+ * @default import { isLinkExternal } from '@vuepress/shared'
32
+ */
33
+ isExternal ?: ( href : string , env : MarkdownEnv ) => boolean
27
34
}
28
35
29
36
/**
@@ -38,6 +45,8 @@ export const linksPlugin: PluginWithOptions<LinksPluginOptions> = (
38
45
) : void => {
39
46
// tag of internal links
40
47
const internalTag = options . internalTag || 'RouteLink'
48
+ const isExternal =
49
+ options . isExternal ?? ( ( href , env ) => isLinkExternal ( href , env . base ) )
41
50
42
51
// attrs that going to be added to external links
43
52
const externalAttrs = {
@@ -73,7 +82,7 @@ export const linksPlugin: PluginWithOptions<LinksPluginOptions> = (
73
82
const { base = '/' , filePathRelative = null } = env
74
83
75
84
// check if a link is an external link
76
- if ( isLinkExternal ( hrefLink , base ) ) {
85
+ if ( isExternal ( hrefLink , env ) ) {
77
86
// set `externalAttrs` to current token
78
87
Object . entries ( externalAttrs ) . forEach ( ( [ key , val ] ) => {
79
88
token . attrSet ( key , val )
0 commit comments