@@ -54,18 +54,33 @@ const customResolver = nodeResolve({
5454 preferBuiltins : true
5555} )
5656
57- function isAncestorsCjs ( resolvedId , parentId ) {
58- let currNmIndex = resolvedId . indexOf ( SLASH_NODE_MODULES_SLASH )
57+ function isAncestorsExternal ( id , depStats ) {
58+ let currNmIndex = id . indexOf ( SLASH_NODE_MODULES_SLASH )
5959 while ( currNmIndex !== - 1 ) {
60- const nextNmIndex = resolvedId . indexOf (
61- SLASH_NODE_MODULES_SLASH ,
62- currNmIndex + 1
63- )
64- const currPkgName = resolvedId . slice (
60+ const nextNmIndex = id . indexOf ( SLASH_NODE_MODULES_SLASH , currNmIndex + 1 )
61+ const nameStart = currNmIndex + SLASH_NODE_MODULES_SLASH . length
62+ const nameEnd = getPackageNameEnd ( id , nameStart )
63+ const name = id . slice ( nameStart , nameEnd )
64+ const nameSlashFilename = id . slice (
6565 currNmIndex + SLASH_NODE_MODULES_SLASH . length ,
66- nextNmIndex === - 1 ? resolvedId . length : nextNmIndex
66+ nextNmIndex === - 1 ? id . length : nextNmIndex
6767 )
68- if ( isEsmId ( currPkgName , parentId ) ) {
68+ if ( isEsmId ( nameSlashFilename , id ) ) {
69+ return false
70+ }
71+ const {
72+ version,
73+ dependencies = { } ,
74+ optionalDependencies = { } ,
75+ peerDependencies = { }
76+ } = readPackageJsonSync ( `${ id . slice ( 0 , nameEnd ) } /package.json` )
77+ const range =
78+ dependencies [ name ] ??
79+ optionalDependencies [ name ] ??
80+ peerDependencies [ name ] ??
81+ version
82+ const seenRange = pkgDeps [ name ] ?? depStats . external [ name ]
83+ if ( seenRange && ! rangesIntersect ( seenRange , range ) ) {
6984 return false
7085 }
7186 currNmIndex = nextNmIndex
@@ -93,22 +108,24 @@ export default (extendConfig = {}) => {
93108 return true
94109 }
95110 const id = normalizeId ( id_ )
96- if ( isRelative ( id ) ) {
111+ if (
112+ isRelative ( id ) ||
113+ id . endsWith ( '.mjs' ) ||
114+ id . endsWith ( '.mts' ) ||
115+ id . endsWith ( '.ts' )
116+ ) {
97117 return false
98118 }
99- if ( id . endsWith ( '.cjs' ) ) {
100- return true
101- }
102- if ( id . endsWith ( '.mjs' ) || id . endsWith ( '.mts' ) || id . endsWith ( '.ts' ) ) {
119+ const parentId = parentId_ ? resolveId ( parentId_ ) : undefined
120+ if ( parentId && ! isAncestorsExternal ( parentId , depStats ) ) {
103121 return false
104122 }
105- const parentId = parentId_ ? resolveId ( parentId_ ) : undefined
106123 const resolvedId = resolveId ( id , parentId )
107- if ( resolvedId . endsWith ( '.json' ) ) {
108- return isAncestorsCjs ( resolvedId , parentId )
124+ if ( ! isAncestorsExternal ( resolvedId , depStats ) ) {
125+ return false
109126 }
110127 const name = getPackageName ( id )
111- if ( ! isValidPackageName ( name ) || name === '@babel/runtime' ) {
128+ if ( name === '@babel/runtime' || ! isValidPackageName ( name ) ) {
112129 return false
113130 }
114131 if ( isEsmId ( resolvedId , parentId ) ) {
@@ -123,16 +140,13 @@ export default (extendConfig = {}) => {
123140 parentPkg ?. peerDependencies ?. [ name ] ??
124141 readPackageUpSync ( { cwd : path . dirname ( resolvedId ) } ) ?. packageJson
125142 ?. version ??
126- ''
143+ 'latest '
127144 return false
128145 }
129146 const parentNodeModulesIndex = parentId . lastIndexOf (
130147 SLASH_NODE_MODULES_SLASH
131148 )
132149 if ( parentNodeModulesIndex !== - 1 ) {
133- if ( isAncestorsCjs ( resolvedId , parentId ) ) {
134- return true
135- }
136150 const parentNameStart =
137151 parentNodeModulesIndex + SLASH_NODE_MODULES_SLASH . length
138152 const parentNameEnd = getPackageNameEnd ( parentId , parentNameStart )
@@ -144,17 +158,17 @@ export default (extendConfig = {}) => {
144158 } = readPackageJsonSync (
145159 `${ parentId . slice ( 0 , parentNameEnd ) } /package.json`
146160 )
147- const curRange =
161+ const range =
148162 dependencies [ name ] ??
149163 optionalDependencies [ name ] ??
150164 peerDependencies [ name ] ??
151165 version
152166 const seenRange = pkgDeps [ name ] ?? depStats . external [ name ]
153167 if ( seenRange ) {
154- return rangesIntersect ( seenRange , curRange )
168+ return rangesIntersect ( seenRange , range )
155169 }
156- depStats . external [ name ] = curRange
157- depStats . transitives [ name ] = curRange
170+ depStats . external [ name ] = range
171+ depStats . transitives [ name ] = range
158172 } else if ( pkgDeps [ name ] ) {
159173 depStats . external [ name ] = pkgDeps [ name ]
160174 depStats . dependencies [ name ] = pkgDeps [ name ]
0 commit comments