Skip to content

Commit 5426b42

Browse files
jsleuthpat841
authored andcommitted
fix(webpack): pull-request comment updates
1 parent 1263657 commit 5426b42

File tree

3 files changed

+57
-60
lines changed

3 files changed

+57
-60
lines changed

src/AureliaDependenciesPlugin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class AureliaDependency extends IncludeDependency {
1515
class Template {
1616
apply(dep: AureliaDependency, source: Webpack.Source) {
1717
// Get the module id, fallback to using the module request
18-
let moduleId: string = dep.request;
19-
if (dep.module && typeof dep.module[preserveModuleName] === 'string') {
18+
let moduleId = dep.request;
19+
if (dep.module && typeof dep.module[preserveModuleName] === "string") {
2020
moduleId = dep.module[preserveModuleName];
2121
}
2222

src/PreserveModuleNamePlugin.ts

Lines changed: 49 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
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': {
@@ -52,7 +52,7 @@
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");
9292
export 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

9898
const 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 (/^async[?!]/.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 || !(/\bnode_modules\b/i.test(module.resource)));
175+
function isNodeModule(module: Webpack.Module) {
176+
return (module.resource && /\bnode_modules\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
*/
268259
function 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
*/
375366
function 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
*/
400391
function 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
*/
476472
function 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
}

src/webpack.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,15 @@ declare namespace Webpack {
5757
range: [number, number];
5858
// Those types are not correct, but that's enough to compile this project
5959
property: IdentifierExpression;
60-
object: { name: string; type: string; } & MemberExpression;
60+
object: { name: string; type: string; } & (MemberExpression | Identifier);
6161
type: "MemberExpression";
6262
}
6363

64+
export class Identifier {
65+
name: string;
66+
type: "Identifier";
67+
}
68+
6469
export class IdentifierExpression {
6570
range: [number, number];
6671
name: string;

0 commit comments

Comments
 (0)