@@ -12,6 +12,17 @@ export type ModuleName = keyof typeof stdLibBrowser
12
12
export type ModuleNameWithoutNodePrefix < T = ModuleName > = T extends `node:${infer P } ` ? P : never
13
13
14
14
export type PolyfillOptions = {
15
+ /**
16
+ * Includes specific modules. If empty, includes all modules
17
+ * @example
18
+ *
19
+ * ```ts
20
+ * nodePolyfills({
21
+ * include: ['fs', 'path'],
22
+ * })
23
+ * ```
24
+ */
25
+ include ?: ModuleNameWithoutNodePrefix [ ] ,
15
26
/**
16
27
* @example
17
28
*
@@ -51,6 +62,7 @@ export type PolyfillOptions = {
51
62
}
52
63
53
64
export type PolyfillOptionsResolved = {
65
+ include : ModuleNameWithoutNodePrefix [ ] ,
54
66
exclude : ModuleNameWithoutNodePrefix [ ] ,
55
67
globals : {
56
68
Buffer : BooleanOrBuildTarget ,
@@ -112,6 +124,7 @@ export const nodePolyfills = (options: PolyfillOptions = {}): Plugin => {
112
124
const globalShimsBannerPath = require . resolve ( 'vite-plugin-node-polyfills/shims/banner' )
113
125
const globalShimsBanner = readFileSync ( globalShimsBannerPath , 'utf-8' )
114
126
const optionsResolved : PolyfillOptionsResolved = {
127
+ include : [ ] ,
115
128
exclude : [ ] ,
116
129
protocolImports : true ,
117
130
...options ,
@@ -123,10 +136,15 @@ export const nodePolyfills = (options: PolyfillOptions = {}): Plugin => {
123
136
} ,
124
137
}
125
138
139
+ const compareExcludedModuleNames = ( moduleName : string , excludedName : string ) => {
140
+ return moduleName === excludedName || moduleName === `node:${ excludedName } ` ;
141
+ }
142
+
126
143
const isExcluded = ( name : string ) => {
127
- return optionsResolved . exclude . some ( ( excludedName ) => {
128
- return name === excludedName || name === `node:${ excludedName } `
129
- } )
144
+ if ( optionsResolved . include . length ) {
145
+ return ! optionsResolved . include . some ( ( excludedName ) => compareExcludedModuleNames ( name , excludedName ) ) ;
146
+ } ;
147
+ return optionsResolved . exclude . some ( ( excludedName ) => compareExcludedModuleNames ( name , excludedName ) ) ;
130
148
}
131
149
132
150
const toOverride = ( name : string ) : string | void => {
@@ -153,6 +171,8 @@ export const nodePolyfills = (options: PolyfillOptions = {}): Plugin => {
153
171
return included
154
172
} , { } as Record < ModuleName , string > )
155
173
174
+ console . log ( { ArrayNames : Object . keys ( polyfills ) } ) ;
175
+
156
176
return {
157
177
build : {
158
178
rollupOptions : {
0 commit comments