1717 * - The path to the module itself: /home/usr/pkg/node_modules
1818 * - The module name: mod
1919 * - The relative path: dir/file.js
20- * - Map the parsed path data to _nodeModuleResourcesMap by the parsed module name and its resource location
20+ * - Map the parsed path data to nodeModuleResourcesMap by the parsed module name and its resource location
2121 * - Example Map:
2222 * {
2323 * 'aurelia-templating-router': {
5252 * - If there are multiple entry points:
5353 * - Pick the most shallow resource
5454 * - If they are both as shallow as possible choose index over module name match
55- * - Map the normalized module id to _nodeModuleResourceIdMap by the resource file
55+ * - Map the normalized module id to nodeModuleResourceIdMap by the resource file
5656 * - Example Map:
5757 * {
5858 * '/home/usr/pkg/node_modules/aurelia-templating-router/dist/native-modules/router-view.js': 'aurelia-templating-router/router-view.js',
@@ -92,8 +92,8 @@ import path = require("path");
9292export const preserveModuleName = Symbol ( ) ;
9393
9494// node_module maps
95- const _nodeModuleResourcesMap : NodeModule . ResourcesMap = { } ;
96- const _nodeModuleResourceIdMap : NodeModule . ResourceIdMap = { } ;
95+ const nodeModuleResourcesMap : NodeModule . ResourcesMap = { } ;
96+ const nodeModuleResourceIdMap : NodeModule . ResourceIdMap = { } ;
9797
9898const TAP_NAME = "Aurelia:PreserveModuleName" ;
9999
@@ -124,7 +124,7 @@ export class PreserveModuleNamePlugin {
124124 }
125125
126126 // Map and parse the modules if needed
127- modulesBeforeConcat . forEach ( ( m ) => mapNodeModule ( m ) ) ;
127+ modulesBeforeConcat . forEach ( mapNodeModule ) ;
128128 parseNodeModules ( ) ;
129129
130130 for ( let module of getPreservedModules ( modules ) ) {
@@ -137,8 +137,6 @@ export class PreserveModuleNamePlugin {
137137
138138 // Get the module id
139139 let id = getModuleId ( realModule , roots , alias ) ;
140- if ( ! id )
141- throw new Error ( `Can't figure out a normalized module name for ${ realModule . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
142140
143141 // Remove default extensions
144142 normalizers . forEach ( n => id = id ! . replace ( n , "" ) ) ;
@@ -147,6 +145,7 @@ export class PreserveModuleNamePlugin {
147145 if ( / ^ a s y n c [ ? ! ] / . test ( realModule . rawRequest ) )
148146 id = "async!" + id ;
149147
148+ id = id . replace ( / \\ / g, "/" ) ;
150149 if ( module . buildMeta ) // meta can be null if the module contains errors
151150 module . buildMeta [ "aurelia-id" ] = id ;
152151 if ( ! this . isDll ) {
@@ -168,21 +167,13 @@ function getPreservedModules(modules: Webpack.Module[]) {
168167 }
169168
170169 // Preserve the module if its dependencies are also preserved
171- const reasons = ( m . reasons && Array . isArray ( m . reasons ) ) ? m . reasons : [ ] ;
172- return reasons . some ( ( reason ) => Boolean ( reason . dependency && reason . dependency [ preserveModuleName ] ) ) ;
170+ return m . reasons . some ( reason => ( reason . dependency && reason . dependency [ preserveModuleName ] ) ) ;
173171 } )
174172 ) ;
175173}
176174
177- /**
178- * Check if a module exists in node_modules/
179- *
180- * @param {Webpack.Module } module The module to check
181- *
182- * @return {Boolean } True if it exists in node_modules/, false otherwise
183- */
184- function isNodeModule ( module : Webpack . Module ) : boolean {
185- return ! ( ! module || ! module . resource || ! ( / \b n o d e _ m o d u l e s \b / i. test ( module . resource ) ) ) ;
175+ function isNodeModule ( module : Webpack . Module ) {
176+ return ( module . resource && / \b n o d e _ m o d u l e s \b / i. test ( module . resource ) ) ;
186177}
187178
188179/**
@@ -234,10 +225,10 @@ function mapNodeModule(module: Webpack.Module) {
234225 }
235226
236227 // Map it
237- if ( ! _nodeModuleResourcesMap [ moduleData . name ] ) {
238- _nodeModuleResourcesMap [ moduleData . name ] = { } ;
228+ if ( ! nodeModuleResourcesMap [ moduleData . name ] ) {
229+ nodeModuleResourcesMap [ moduleData . name ] = { } ;
239230 }
240- _nodeModuleResourcesMap [ moduleData . name ] [ module . resource ] = moduleData ;
231+ nodeModuleResourcesMap [ moduleData . name ] [ module . resource ] = moduleData ;
241232}
242233
243234/**
@@ -266,13 +257,13 @@ function mapNodeModule(module: Webpack.Module) {
266257 * @return {undefined }
267258 */
268259function parseNodeModules ( ) {
269- if ( ! _nodeModuleResourcesMap || ! Object . keys ( _nodeModuleResourcesMap ) . length ) {
260+ if ( ! nodeModuleResourcesMap || ! Object . keys ( nodeModuleResourcesMap ) . length ) {
270261 return ;
271262 }
272263
273264 // Parse each module
274- for ( const moduleKey in _nodeModuleResourcesMap ) {
275- const moduleResources : NodeModule . ModuleResource = _nodeModuleResourcesMap [ moduleKey ] ;
265+ for ( const moduleKey in nodeModuleResourcesMap ) {
266+ const moduleResources : NodeModule . ModuleResource = nodeModuleResourcesMap [ moduleKey ] ;
276267
277268 // Keep track of the common resource path and possible module entry points
278269 let commonPathParts : string [ ] = [ ] ;
@@ -281,15 +272,15 @@ function parseNodeModules() {
281272 // Parse each resource in the module
282273 for ( const resource in moduleResources ) {
283274 const data : NodeModule . Data = moduleResources [ resource ] ;
284- const pathParts : string [ ] = data . relative . split ( '/' ) ;
275+ const pathParts = data . relative . split ( "/" ) ;
285276 const resourceFile : string | null = pathParts . splice ( - 1 ) [ 0 ] ;
286277 if ( ! resourceFile ) {
287278 continue ;
288279 }
289280
290281 // Entry?
291- const resourceName : string = resourceFile . replace ( / \. .* / , '' ) ;
292- if ( resourceName === moduleKey || resourceName === ' index' ) {
282+ const resourceName = resourceFile . replace ( / \. .* / , "" ) ;
283+ if ( resourceName === moduleKey || resourceName === " index" ) {
293284 possibleEntryPoints . push ( resource ) ;
294285 }
295286
@@ -314,12 +305,12 @@ function parseNodeModules() {
314305 }
315306
316307 // Convert common path to string
317- let commonPath : string = commonPathParts . join ( '/' ) ;
318- commonPath = ( commonPath . startsWith ( '/' ) ) ? commonPath : `/${ commonPath } ` ;
308+ let commonPath = commonPathParts . join ( "/" ) ;
309+ commonPath = ( commonPath . startsWith ( "/" ) ) ? commonPath : `/${ commonPath } ` ;
319310
320311 // If there is more than one possible entry point, use the most shallow resource
321312 let moduleEntry : string | null = null ;
322- possibleEntryPoints . forEach ( ( resource : string ) => {
313+ possibleEntryPoints . forEach ( ( resource ) => {
323314 const data : NodeModule . Data = moduleResources [ resource ] ;
324315
325316 // No entry yet?
@@ -328,7 +319,7 @@ function parseNodeModules() {
328319 }
329320
330321 // Shallow?
331- else if ( moduleEntry . split ( '/' ) . length > data . relative . split ( '/' ) . length ) {
322+ else if ( moduleEntry . split ( "/" ) . length > data . relative . split ( "/" ) . length ) {
332323 moduleEntry = data . relative ;
333324 }
334325
@@ -340,25 +331,25 @@ function parseNodeModules() {
340331 } ) ;
341332
342333 // If an entry point still hasnt been found and there is only one resource, use that
343- const resourceKeys : string [ ] = Object . keys ( moduleResources ) ;
334+ const resourceKeys = Object . keys ( moduleResources ) ;
344335 if ( ! moduleEntry && resourceKeys . length === 1 ) {
345336 moduleEntry = moduleResources [ resourceKeys [ 0 ] ] . relative ;
346337 }
347338
348339 // Map the resources to the module id
349- resourceKeys . forEach ( ( resource : string ) => {
340+ resourceKeys . forEach ( ( resource ) => {
350341 const data : NodeModule . Data = moduleResources [ resource ] ;
351342
352343 // Entry?
353344 if ( moduleEntry === data . relative ) {
354- _nodeModuleResourceIdMap [ resource ] = moduleKey ;
345+ nodeModuleResourceIdMap [ resource ] = moduleKey ;
355346 return ;
356347 }
357348
358349 // Build the id from the resources common path
359- let key : string = data . relative . replace ( new RegExp ( `^${ escapeString ( commonPath ) } ` ) , '' ) ;
360- key = ( key . startsWith ( '/' ) ) ? key : `/${ key } ` ;
361- _nodeModuleResourceIdMap [ resource ] = `${ moduleKey } ${ key } ` ;
350+ let key = data . relative . replace ( new RegExp ( `^${ escapeString ( commonPath ) } ` ) , "" ) ;
351+ key = ( key . startsWith ( "/" ) ) ? key : `/${ key } ` ;
352+ nodeModuleResourceIdMap [ resource ] = `${ moduleKey } ${ key } ` ;
362353 } ) ;
363354 }
364355}
@@ -373,14 +364,14 @@ function parseNodeModules() {
373364 * @return {string|null } The relative path if available, null otherwise
374365 */
375366function getRelativeModule ( module : Webpack . Module , paths : string [ ] ) : string | null {
376- if ( ! module || ! module . resource || ! paths || ! paths . length ) {
367+ if ( ! module . resource || ! paths || ! paths . length ) {
377368 return null ;
378369 }
379370
380371 // Try to find the module in the resolver paths
381372 for ( let i = 0 , len = paths . length ; i < len ; i ++ ) {
382- const relative : string = path . relative ( paths [ i ] , module . resource ) ;
383- if ( ! relative . startsWith ( '..' ) ) {
373+ const relative = path . relative ( paths [ i ] , module . resource ) ;
374+ if ( ! relative . startsWith ( ".." ) ) {
384375 return relative ;
385376 }
386377 }
@@ -398,19 +389,19 @@ function getRelativeModule(module: Webpack.Module, paths: string[]): string | nu
398389 * @return {string|null } The alias path if available, null otherwise
399390 */
400391function getAliasModule ( module : Webpack . Module , aliases : { [ key : string ] : string } | null ) : string | null {
401- if ( ! module || ! module . resource || ! aliases || ! Object . keys ( aliases ) . length ) {
392+ if ( ! module . resource || ! aliases || ! Object . keys ( aliases ) . length ) {
402393 return null ;
403394 }
404395
405396 // Look for the module in each alias
406397 for ( let alias in aliases ) {
407- const relative : string = path . relative ( path . resolve ( aliases [ alias ] ) , module . resource ) ;
408- if ( relative . startsWith ( '..' ) ) {
398+ const relative = path . relative ( path . resolve ( aliases [ alias ] ) , module . resource ) ;
399+ if ( relative . startsWith ( ".." ) ) {
409400 continue ;
410401 }
411402
412403 // Absolute alias?
413- alias = alias . replace ( / \$ $ / , '' ) ;
404+ alias = alias . replace ( / \$ $ / , "" ) ;
414405 return ( relative && relative . length ) ? `${ alias } /${ relative } ` : alias ;
415406 }
416407
@@ -425,13 +416,9 @@ function getAliasModule(module: Webpack.Module, aliases: { [key: string]: string
425416 * @param {string[] } paths The webpack resolver module paths
426417 * @param {[{ [key: string]: string }|null } aliases The webpack aliases
427418 *
428- * @return {string|null } The module id if available, null otherwise
419+ * @return {string } The module id
429420 */
430- function getModuleId ( module : Webpack . Module , paths : string [ ] , aliases : { [ key : string ] : string } | null ) : string | null {
431- if ( ! module ) {
432- return null ;
433- }
434-
421+ function getModuleId ( module : Webpack . Module , paths : string [ ] , aliases : { [ key : string ] : string } | null ) : string {
435422 // Handling module ids can be a bit tricky
436423 // Modules can be included in any of the following ways:
437424 // import { Module } from 'module'
@@ -456,14 +443,23 @@ function getModuleId(module: Webpack.Module, paths: string[], aliases: { [key: s
456443 // In order to have the aurelia-loader work correctly, we need to coerce everything to absolute ids
457444 // Is it a node_module?
458445 if ( isNodeModule ( module ) ) {
459- return _nodeModuleResourceIdMap [ module . resource ] ;
446+ return nodeModuleResourceIdMap [ module . resource ] ;
460447 }
461448
462449 // Get the module relative to the webpack resolver paths
463450 let moduleId = getRelativeModule ( module , paths ) ;
464451
465452 // Fallback to parsing aliases if needed
466- return ( moduleId ) ? moduleId : getAliasModule ( module , aliases ) ;
453+ if ( ! moduleId ) {
454+ moduleId = getAliasModule ( module , aliases ) ;
455+ }
456+
457+ // Still nothing?
458+ if ( ! moduleId ) {
459+ throw new Error ( `Can't figure out a normalized module name for ${ module . rawRequest } , please call PLATFORM.moduleName() somewhere to help.` ) ;
460+ }
461+
462+ return moduleId ;
467463}
468464
469465/**
@@ -474,9 +470,5 @@ function getModuleId(module: Webpack.Module, paths: string[], aliases: { [key: s
474470 * @return {string|null } The escaped string
475471 */
476472function escapeString ( str : string ) : string | null {
477- if ( typeof str !== 'string' ) {
478- return null ;
479- }
480-
481- return str . replace ( / [ - \/ \\ ^ $ * + ? . ( ) | [ \] { } ] / g, '\\$&' ) ;
473+ return str . replace ( / [ - \/ \\ ^ $ * + ? . ( ) | [ \] { } ] / g, "\\$&" ) ;
482474}
0 commit comments