7
7
8
8
import path from "path" ;
9
9
10
- import type { Plugin } from "@docusaurus/types" ;
10
+ import type { Plugin , ConfigureWebpackUtils } from "@docusaurus/types" ;
11
+ import type { Configuration } from "webpack" ;
11
12
12
13
export default function docusaurusThemeOpenAPI ( ) : Plugin < void > {
13
14
return {
14
15
name : "docusaurus-theme-openapi" ,
15
16
16
17
getClientModules ( ) {
17
- const modules = [
18
+ return [
18
19
require . resolve (
19
20
path . join ( __dirname , ".." , "lib" , "theme" , "styles.scss" )
20
21
) ,
21
22
] ;
22
- return modules ;
23
23
} ,
24
24
25
25
getThemePath ( ) {
@@ -30,26 +30,45 @@ export default function docusaurusThemeOpenAPI(): Plugin<void> {
30
30
return path . resolve ( __dirname , ".." , "src" , "theme" ) ;
31
31
} ,
32
32
33
- configureWebpack ( _ , isServer , utils ) {
34
- const rules : any = _ . module ?. rules ?? [ ] ;
35
- const sassLoaderRule = rules . filter ( ( r : any ) => {
36
- return String ( r . test ) === String ( / \. s [ c a ] s s $ / ) ;
33
+ configureWebpack (
34
+ config : Configuration ,
35
+ isServer : boolean ,
36
+ utils : ConfigureWebpackUtils
37
+ ) : Configuration {
38
+ const { getStyleLoaders, currentBundler } = utils ;
39
+
40
+ // --- Drop-in replacement for @faker-js/faker --------------------------
41
+ const fakerAlias = { "@faker-js/faker" : false } as const ;
42
+
43
+ const ignoreFaker = new currentBundler . instance . IgnorePlugin ( {
44
+ resourceRegExp : / ^ @ f a k e r - j s \/ f a k e r $ / ,
37
45
} ) ;
38
- const { getStyleLoaders } = utils ;
39
- // Avoid conflicts with docusaurus-plugin-sass
40
- if ( sassLoaderRule . length === 0 ) {
41
- return {
42
- resolve : {
43
- fallback : {
44
- buffer : require . resolve ( "buffer/" ) ,
45
- } ,
46
+ // ----------------------------------------------------------------------
47
+
48
+ const existingRules : any [ ] = config . module ?. rules ?? [ ] ;
49
+ const hasSassRule = existingRules . some (
50
+ ( r ) => String ( r . test ) === String ( / \. s [ c a ] s s $ / )
51
+ ) ;
52
+
53
+ const baseConfig : Configuration = {
54
+ resolve : {
55
+ alias : fakerAlias ,
56
+ fallback : {
57
+ buffer : require . resolve ( "buffer/" ) ,
46
58
} ,
47
- plugins : [
48
- new utils . currentBundler . instance . ProvidePlugin ( {
49
- process : require . resolve ( "process/browser" ) ,
50
- Buffer : [ "buffer" , "Buffer" ] ,
51
- } ) ,
52
- ] ,
59
+ } ,
60
+ plugins : [
61
+ ignoreFaker ,
62
+ new currentBundler . instance . ProvidePlugin ( {
63
+ process : require . resolve ( "process/browser" ) ,
64
+ Buffer : [ "buffer" , "Buffer" ] ,
65
+ } ) ,
66
+ ] ,
67
+ } ;
68
+
69
+ if ( ! hasSassRule ) {
70
+ return {
71
+ ...baseConfig ,
53
72
module : {
54
73
rules : [
55
74
{
@@ -67,19 +86,8 @@ export default function docusaurusThemeOpenAPI(): Plugin<void> {
67
86
} ,
68
87
} ;
69
88
}
70
- return {
71
- resolve : {
72
- fallback : {
73
- buffer : require . resolve ( "buffer/" ) ,
74
- } ,
75
- } ,
76
- plugins : [
77
- new utils . currentBundler . instance . ProvidePlugin ( {
78
- process : require . resolve ( "process/browser" ) ,
79
- Buffer : [ "buffer" , "Buffer" ] ,
80
- } ) ,
81
- ] ,
82
- } ;
89
+
90
+ return baseConfig ;
83
91
} ,
84
92
} ;
85
93
}
0 commit comments