@@ -18,9 +18,10 @@ if (require.main === module) {
18
18
fs . rmSync ( './npmDist' , { recursive : true , force : true } ) ;
19
19
fs . mkdirSync ( './npmDist' ) ;
20
20
21
- const packageJSON = buildPackageJSON ( ) ;
22
-
23
21
const srcFiles = readdirRecursive ( './src' , { ignoreDir : / ^ _ _ .* _ _ $ / } ) ;
22
+
23
+ const packageJSON = buildPackageJSON ( srcFiles ) ;
24
+
24
25
for ( const filepath of srcFiles ) {
25
26
const srcPath = path . join ( './src' , filepath ) ;
26
27
const destPath = path . join ( './npmDist' , filepath ) ;
@@ -91,7 +92,7 @@ function babelBuild(srcPath, options) {
91
92
return code + '\n' ;
92
93
}
93
94
94
- function buildPackageJSON ( ) {
95
+ function buildPackageJSON ( srcFiles ) {
95
96
const packageJSON = JSON . parse (
96
97
fs . readFileSync ( require . resolve ( '../package.json' ) , 'utf-8' ) ,
97
98
) ;
@@ -122,5 +123,19 @@ function buildPackageJSON() {
122
123
packageJSON . publishConfig = { tag : publishTag } ;
123
124
}
124
125
126
+ /**
127
+ * This prevents breaking previous versions of imports with explicit extensions
128
+ * Like `require("graphql/language/parser.js")`
129
+ */
130
+ for ( const srcFile of srcFiles ) {
131
+ if ( srcFile . endsWith ( '.ts' ) ) {
132
+ const srcFilePath = srcFile . slice ( 0 , srcFile . length - 3 ) ;
133
+ packageJSON . exports [ `./${ srcFilePath } .js` ] = {
134
+ require : `./${ srcFilePath } .js` ,
135
+ import : `./${ srcFilePath } .mjs` ,
136
+ } ;
137
+ }
138
+ }
139
+
125
140
return packageJSON ;
126
141
}
0 commit comments