@@ -68,7 +68,7 @@ interface AMDResult {
68
68
}
69
69
class AMDReader {
70
70
public static read ( code : string ) : AMDResult {
71
- const document : AMDResult = { defines : [ ] , remaps : { } }
71
+ const result : AMDResult = { defines : [ ] , remaps : { } }
72
72
const resource_names : { [ name : string ] : null } = { }
73
73
const pattern = / d e f i n e \s * \( " ( .* ) " , \s * \[ ( .* ) ] ,\s * f u n c t i o n / gm
74
74
while ( true ) {
@@ -90,27 +90,44 @@ class AMDReader {
90
90
const directive = split [ 0 ]
91
91
const absoluteName = join ( module_root , split [ 1 ] )
92
92
const resource = `${ directive } !${ absoluteName } `
93
- document . remaps [ resource ] = document . remaps [ resource ] || [ ]
94
- document . remaps [ resource ] . push ( dependency )
93
+ result . remaps [ resource ] = result . remaps [ resource ] || [ ]
94
+ result . remaps [ resource ] . push ( dependency )
95
95
resource_names [ resource ] = null
96
96
return resource
97
97
}
98
98
}
99
99
return dependency
100
100
} )
101
101
const define = { type, name, dependencies : dependencies }
102
- document . defines . push ( define as Define )
102
+ result . defines . push ( define as Define )
103
+ }
104
+
105
+ // Resolve the resource path prefix. This is resolved from the
106
+ // 'last' definition in the bundle. We are looking for multi
107
+ // component paths (i.e 'parent/index'). This indicates that
108
+ // TypeScript has re-orientated the module paths due to a
109
+ // module inside the 'projectRoot' importing outside the project
110
+ // root. In these cases, we prefix the resourcePath with ../.
111
+ // for as many path components found - 1.
112
+ let resourcePathPrefix = './'
113
+ if ( result . defines . length > 0 ) {
114
+ const entry = result . defines [ result . defines . length - 1 ] as Module
115
+ const split = entry . name . split ( '/' )
116
+ if ( split . length > 1 ) {
117
+ resourcePathPrefix = split . slice ( 1 ) . map ( n => '../' ) . join ( '' )
118
+ }
103
119
}
104
120
105
121
// Construct Resources from 'resource_names' accumulator.
106
122
const resources = Object . keys ( resource_names ) . map ( name => {
107
- const [ directive , path ] = name . split ( '!' )
123
+ const [ directive , moduleName ] = name . split ( '!' )
108
124
const dependencies = [ "exports" ]
109
125
const type = 'resource'
126
+ const path = `${ resourcePathPrefix } ${ moduleName } `
110
127
return { type, name, path, directive, dependencies } as Resource
111
128
} )
112
- document . defines . unshift ( ...resources )
113
- return document
129
+ result . defines . unshift ( ...resources )
130
+ return result
114
131
}
115
132
}
116
133
0 commit comments