@@ -2,20 +2,22 @@ import glob from "fast-glob";
22import { createExports } from "./create-exports.js" ;
33import { createPublish } from "./create-publish.js" ;
44import { getJsonFormat , logger , read , write } from "./utils.js" ;
5+ import { extname } from "path" ;
56
67/**
78 * @param {object } options
89 * @param {string[] } options.src
910 * @param {string } options.main
1011 * @param {string } options.dist
12+ * @param {boolean } options.preserveExtensions
1113 * @param {boolean } options.wrappers
1214 * @param {boolean } options.workspaces
1315 * @param {boolean } [options.publish]
1416 * @param {boolean } [options.watch]
1517 * @param {boolean } [options.ignoreTypes]
1618 * @param {boolean } [options.centralizePackages]
1719 * @param {boolean } [options.centralizeWrappers]
18- * @param {{src: string, snap: import("./create-exports").Pkg } } options.pkg
20+ * @param {{src: string, snap: string } } options.pkg
1921 */
2022export async function mergeExports ( options ) {
2123 logger ( `getting files...` ) ;
@@ -95,6 +97,7 @@ export async function mergeExports(options) {
9597 dist : options . dist ,
9698 wrappers : options . wrappers ,
9799 ignoreTypes : options . ignoreTypes ,
100+ preserveExtensions : options . preserveExtensions ,
98101 centralizePackages : options . centralizePackages ,
99102 centralizeWrappers : options . centralizeWrappers ,
100103 } ) ;
@@ -112,6 +115,30 @@ export async function mergeExports(options) {
112115 logger ( `${ result . wrappers . length } wrappers created` ) ;
113116 }
114117
118+ if ( options . preserveExtensions ) {
119+ const mappedExports = { } ;
120+ const mappedTypes = { } ;
121+
122+ for ( const key in result . pkg . exports ) {
123+ const value = result . pkg . exports [ key ] ;
124+ const k =
125+ extname ( value . default ) === ".js" && key !== "."
126+ ? `${ key } .js`
127+ : key ;
128+
129+ mappedExports [ k ] = value ;
130+ }
131+
132+ for ( const key in result . pkg . typesVersions [ "*" ] ) {
133+ mappedTypes [ `${ key } .js` ] = result . pkg . typesVersions [ "*" ] [ key ] ;
134+ }
135+
136+ result . pkg . exports = mappedExports ;
137+ result . pkg . typesVersions [ "*" ] = mappedTypes ;
138+
139+ logger ( `extensions preserved` ) ;
140+ }
141+
115142 if ( options . pkg ?. src ) {
116143 logger ( `${ pkg . name } updating...` ) ;
117144 const format = getJsonFormat ( options . pkg ?. snap ) ;
0 commit comments