1
1
const path = require ( 'path' ) ;
2
2
const TSConfigPathsWebpackPlugin = require ( 'tsconfig-paths-webpack-plugin' ) ;
3
3
const version = require ( '../package.json' ) . version ;
4
+ const dotenv = require ( 'dotenv' ) ;
5
+
6
+ const env = dotenv . config ( {
7
+ path : path . resolve ( process . cwd ( ) , process . env . DOTENV_CONFIG_PATH ?? '.env' ) ,
8
+ } ) . parsed ;
9
+
10
+ function injectEnv ( definitions ) {
11
+ const env = 'process.env' ;
12
+
13
+ if ( ! definitions [ env ] ) {
14
+ return {
15
+ ...definitions ,
16
+ [ env ] : JSON . stringify (
17
+ Object . fromEntries (
18
+ Object . entries ( definitions )
19
+ . filter ( ( [ key ] ) => key . startsWith ( env ) )
20
+ . map ( ( [ key , value ] ) => [
21
+ key . substring ( env . length + 1 ) ,
22
+ JSON . parse ( value ) ,
23
+ ] )
24
+ )
25
+ ) ,
26
+ } ;
27
+ }
28
+ return definitions ;
29
+ }
4
30
5
31
module . exports = {
6
32
stories : [ '../src/**/*.stories.mdx' , '../src/**/*.stories.@(js|jsx|ts|tsx)' ] ,
@@ -23,6 +49,12 @@ module.exports = {
23
49
prop . parent ? ! / n o d e _ m o d u l e s / . test ( prop . parent . fileName ) : true ,
24
50
} ,
25
51
} ,
52
+ env : ( config ) => {
53
+ return {
54
+ ...config ,
55
+ ...env ,
56
+ } ;
57
+ } ,
26
58
webpackFinal : async ( config ) => {
27
59
config . module . rules . push ( {
28
60
test : / \. s c s s $ / ,
@@ -64,6 +96,43 @@ module.exports = {
64
96
// console.log("config", config.resolve.plugins);
65
97
// console.log("config", config);
66
98
99
+ config . module . rules . push ( {
100
+ test : / \. t s x ? $ / ,
101
+ exclude : / n o d e _ m o d u l e s / ,
102
+ use : [
103
+ {
104
+ loader : require . resolve ( 'babel-loader' ) ,
105
+ options : {
106
+ presets : [
107
+ require ( '@babel/preset-typescript' ) . default ,
108
+ [
109
+ require ( '@babel/preset-react' ) . default ,
110
+ { runtime : 'automatic' } ,
111
+ ] ,
112
+ require ( '@babel/preset-env' ) . default ,
113
+ ] ,
114
+ } ,
115
+ } ,
116
+ ] ,
117
+ } ) ;
118
+
119
+ config . resolve . extensions . push ( '.ts' , '.tsx' ) ;
120
+
121
+ config . module . rules . push ( {
122
+ test : / \. m j s $ / ,
123
+ include : / n o d e _ m o d u l e s / ,
124
+ type : 'javascript/auto' ,
125
+ } ) ;
126
+
127
+ config . resolve . extensions . push ( '.mjs' ) ;
128
+
129
+ const definePlugin = config . plugins . find (
130
+ ( { constructor } ) => constructor && constructor . name === 'DefinePlugin'
131
+ ) ;
132
+ if ( definePlugin ) {
133
+ definePlugin . definitions = injectEnv ( definePlugin . definitions ) ;
134
+ }
135
+
67
136
return config ;
68
137
} ,
69
138
env : ( config ) => ( {
0 commit comments