@@ -13,14 +13,33 @@ const NPM_BUILD_DIR = 'build/npm';
13
13
const BUILD_DIR = 'build' ;
14
14
const NPM_IGNORE = fs . existsSync ( '.npmignore' ) ? '.npmignore' : '../../.npmignore' ;
15
15
16
- const ASSETS = [ 'README.md' , 'LICENSE' , 'package.json' , NPM_IGNORE ] ;
17
- const ENTRY_POINTS = [ 'main' , 'module' , 'types' , 'browser' ] ;
16
+ const ASSETS = [ 'README.md' , 'LICENSE' , 'package.json' , NPM_IGNORE ] as const ;
17
+ const ENTRY_POINTS = [ 'main' , 'module' , 'types' , 'browser' ] as const ;
18
+ const EXPORT_MAP_ENTRY_POINT = 'exports' ;
19
+ const TYPES_VERSIONS_ENTRY_POINT = 'typesVersions' ;
18
20
19
21
const packageWithBundles = process . argv . includes ( '--bundles' ) ;
20
22
const buildDir = packageWithBundles ? NPM_BUILD_DIR : BUILD_DIR ;
21
23
24
+ type PackageJsonEntryPoints = Record < typeof ENTRY_POINTS [ number ] , string > ;
25
+
26
+ interface PackageJson extends Record < string , unknown > , PackageJsonEntryPoints {
27
+ [ EXPORT_MAP_ENTRY_POINT ] : {
28
+ [ key : string ] : {
29
+ import : string ;
30
+ require : string ;
31
+ types : string ;
32
+ } ;
33
+ } ;
34
+ [ TYPES_VERSIONS_ENTRY_POINT ] : {
35
+ [ key : string ] : {
36
+ [ key : string ] : string [ ] ;
37
+ } ;
38
+ } ;
39
+ }
40
+
22
41
// eslint-disable-next-line @typescript-eslint/no-var-requires
23
- const pkgJson : { [ key : string ] : unknown } = require ( path . resolve ( 'package.json' ) ) ;
42
+ const pkgJson : PackageJson = require ( path . resolve ( 'package.json' ) ) ;
24
43
25
44
// check if build dir exists
26
45
if ( ! fs . existsSync ( path . resolve ( buildDir ) ) ) {
@@ -44,13 +63,29 @@ ASSETS.forEach(asset => {
44
63
// package.json modifications
45
64
const newPackageJsonPath = path . resolve ( buildDir , 'package.json' ) ;
46
65
// eslint-disable-next-line @typescript-eslint/no-var-requires
47
- const newPkgJson : { [ key : string ] : unknown } = require ( newPackageJsonPath ) ;
66
+ const newPkgJson : PackageJson = require ( newPackageJsonPath ) ;
48
67
49
68
// modify entry points to point to correct paths (i.e. strip out the build directory)
50
69
ENTRY_POINTS . filter ( entryPoint => newPkgJson [ entryPoint ] ) . forEach ( entryPoint => {
51
- newPkgJson [ entryPoint ] = ( newPkgJson [ entryPoint ] as string ) . replace ( `${ buildDir } /` , '' ) ;
70
+ newPkgJson [ entryPoint ] = newPkgJson [ entryPoint ] . replace ( `${ buildDir } /` , '' ) ;
52
71
} ) ;
53
72
73
+ if ( newPkgJson [ EXPORT_MAP_ENTRY_POINT ] ) {
74
+ Object . entries ( newPkgJson [ EXPORT_MAP_ENTRY_POINT ] ) . forEach ( ( [ key , val ] ) => {
75
+ newPkgJson [ EXPORT_MAP_ENTRY_POINT ] [ key ] = Object . entries ( val ) . reduce ( ( acc , [ key , val ] ) => {
76
+ return { ...acc , [ key ] : val . replace ( `${ buildDir } /` , '' ) } ;
77
+ } , { } as typeof val ) ;
78
+ } ) ;
79
+ }
80
+
81
+ if ( newPkgJson [ TYPES_VERSIONS_ENTRY_POINT ] ) {
82
+ Object . entries ( newPkgJson [ TYPES_VERSIONS_ENTRY_POINT ] ) . forEach ( ( [ key , val ] ) => {
83
+ newPkgJson [ TYPES_VERSIONS_ENTRY_POINT ] [ key ] = Object . entries ( val ) . reduce ( ( acc , [ key , val ] ) => {
84
+ return { ...acc , [ key ] : val . map ( v => v . replace ( `${ buildDir } /` , '' ) ) } ;
85
+ } , { } ) ;
86
+ } ) ;
87
+ }
88
+
54
89
delete newPkgJson . scripts ;
55
90
delete newPkgJson . volta ;
56
91
delete newPkgJson . jest ;
0 commit comments