Skip to content

Commit b821d38

Browse files
feat(loader): Updated regex to be less greedy on finding occurrences. Added debug mode
Also updated string replacement to be returned on a single line, so replacements that happen in commented code don't break the build Added debug query option to console log matched line and replacement for debugging
1 parent b8a4911 commit b821d38

File tree

5 files changed

+87
-70
lines changed

5 files changed

+87
-70
lines changed

Diff for: README.md

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ loaders: [
6060

6161
```
6262

63+
### debug: `(default: false)`
64+
65+
Logs the file, loadChildren string found and replacement string used to the console.
66+
6367
### delimiter: `(default: '#')`
6468

6569
Changes to default delimiter for the module path/module name string

Diff for: spec/index.spec.js

+38-38
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ describe('Loader', function() {
1212

1313
it('should return a loadChildren async require statement', function() {
1414
var result = [
15-
'loadChildren: () => new Promise(function (resolve) {\n',
16-
' (require as any).ensure([], function (require: any) {\n',
17-
' resolve(require(\'./path/to/file.module\')[\'FileModule\']);\n',
18-
' });\n',
15+
'loadChildren: () => new Promise(function (resolve) {',
16+
' (require as any).ensure([], function (require: any) {',
17+
' resolve(require(\'./path/to/file.module\')[\'FileModule\']);',
18+
' });',
1919
'})'
2020
];
2121

@@ -29,8 +29,8 @@ describe('Loader', function() {
2929

3030
it('should return a loadChildren sync require statement', function() {
3131
var result = [
32-
'loadChildren: function() {\n',
33-
' return require(\'./path/to/file.module\')[\'FileModule\'];\n',
32+
'loadChildren: function() {',
33+
' return require(\'./path/to/file.module\')[\'FileModule\'];',
3434
'}'
3535
];
3636

@@ -44,9 +44,9 @@ describe('Loader', function() {
4444

4545
it ('should return a loadChildren System.import statement', function() {
4646
var result = [
47-
'loadChildren: () => System.import(\'./path/to/file.module\')\n',
48-
' .then(function(module) {\n',
49-
' return module[\'FileModule\'];\n',
47+
'loadChildren: () => System.import(\'./path/to/file.module\')',
48+
' .then(function(module) {',
49+
' return module[\'FileModule\'];',
5050
' })'
5151
];
5252

@@ -62,10 +62,10 @@ describe('Loader', function() {
6262
var modulePath = './path/to/file.module';
6363

6464
var result = [
65-
'loadChildren: () => new Promise(function (resolve) {\n',
66-
' (require as any).ensure([], function (require: any) {\n',
67-
' resolve(require(\'./path/to/file.module\')[\'default\']);\n',
68-
' });\n',
65+
'loadChildren: () => new Promise(function (resolve) {',
66+
' (require as any).ensure([], function (require: any) {',
67+
' resolve(require(\'./path/to/file.module\')[\'default\']);',
68+
' });',
6969
'})'
7070
];
7171

@@ -79,10 +79,10 @@ describe('Loader', function() {
7979

8080
it('should support a custom delimiter', function() {
8181
var result = [
82-
'loadChildren: () => new Promise(function (resolve) {\n',
83-
' (require as any).ensure([], function (require: any) {\n',
84-
' resolve(require(\'./path/to/file.module\')[\'FileModule\']);\n',
85-
' });\n',
82+
'loadChildren: () => new Promise(function (resolve) {',
83+
' (require as any).ensure([], function (require: any) {',
84+
' resolve(require(\'./path/to/file.module\')[\'FileModule\']);',
85+
' });',
8686
'})'
8787
];
8888

@@ -99,10 +99,10 @@ describe('Loader', function() {
9999
var env = pmock.platform('win32');
100100

101101
var result = [
102-
'loadChildren: () => new Promise(function (resolve) {\n',
103-
' (require as any).ensure([], function (require: any) {\n',
104-
' resolve(require(\'.\\\\path\\\\to\\\\file.module\')[\'FileModule\']);\n',
105-
' });\n',
102+
'loadChildren: () => new Promise(function (resolve) {',
103+
' (require as any).ensure([], function (require: any) {',
104+
' resolve(require(\'.\\\\path\\\\to\\\\file.module\')[\'FileModule\']);',
105+
' });',
106106
'})'
107107
];
108108

@@ -123,10 +123,10 @@ describe('Loader', function() {
123123

124124
it('should return a loadChildren async require statement', function() {
125125
var result = [
126-
'loadChildren: () => new Promise(function (resolve) {\n',
127-
' (require as any).ensure([], function (require: any) {\n',
128-
' resolve(require(\'../../path/to/file.module.ngfactory\')[\'FileModuleNgFactory\']);\n',
129-
' });\n',
126+
'loadChildren: () => new Promise(function (resolve) {',
127+
' (require as any).ensure([], function (require: any) {',
128+
' resolve(require(\'../../path/to/file.module.ngfactory\')[\'FileModuleNgFactory\']);',
129+
' });',
130130
'})'
131131
];
132132

@@ -140,8 +140,8 @@ describe('Loader', function() {
140140

141141
it('should return a loadChildren sync require statement', function() {
142142
var result = [
143-
'loadChildren: function() {\n',
144-
' return require(\'../../path/to/file.module.ngfactory\')[\'FileModuleNgFactory\'];\n',
143+
'loadChildren: function() {',
144+
' return require(\'../../path/to/file.module.ngfactory\')[\'FileModuleNgFactory\'];',
145145
'}'
146146
];
147147

@@ -155,9 +155,9 @@ describe('Loader', function() {
155155

156156
it ('should return a loadChildren System.import statement', function() {
157157
var result = [
158-
'loadChildren: () => System.import(\'../../path/to/file.module.ngfactory\')\n',
159-
' .then(function(module) {\n',
160-
' return module[\'FileModuleNgFactory\'];\n',
158+
'loadChildren: () => System.import(\'../../path/to/file.module.ngfactory\')',
159+
' .then(function(module) {',
160+
' return module[\'FileModuleNgFactory\'];',
161161
' })'
162162
];
163163

@@ -173,10 +173,10 @@ describe('Loader', function() {
173173
var moduleSuffix = '.ngfile';
174174

175175
var result = [
176-
'loadChildren: () => new Promise(function (resolve) {\n',
177-
' (require as any).ensure([], function (require: any) {\n',
178-
' resolve(require(\'../../path/to/file.module' + moduleSuffix + '\')[\'FileModuleNgFactory\']);\n',
179-
' });\n',
176+
'loadChildren: () => new Promise(function (resolve) {',
177+
' (require as any).ensure([], function (require: any) {',
178+
' resolve(require(\'../../path/to/file.module' + moduleSuffix + '\')[\'FileModuleNgFactory\']);',
179+
' });',
180180
'})'
181181
];
182182

@@ -192,10 +192,10 @@ describe('Loader', function() {
192192
var factorySuffix = 'NgFact';
193193

194194
var result = [
195-
'loadChildren: () => new Promise(function (resolve) {\n',
196-
' (require as any).ensure([], function (require: any) {\n',
197-
' resolve(require(\'../../path/to/file.module.ngfactory\')[\'FileModule' + factorySuffix + '\']);\n',
198-
' });\n',
195+
'loadChildren: () => new Promise(function (resolve) {',
196+
' (require as any).ensure([], function (require: any) {',
197+
' resolve(require(\'../../path/to/file.module.ngfactory\')[\'FileModule' + factorySuffix + '\']);',
198+
' });',
199199
'})'
200200
];
201201

Diff for: spec/utils.spec.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ describe('Utils', function() {
1818

1919
it('should return a synchronous require loadChildren statement', function() {
2020
var result = [
21-
'loadChildren: function() {\n',
22-
' return ' + getRequireString(path, name) + ';\n',
21+
'loadChildren: function() {',
22+
' return ' + getRequireString(path, name) + ';',
2323
'}'
2424
];
2525

26-
getSyncLoader('path', 'name').should.eql(result.join(''));
26+
getSyncLoader('path', 'name', true).should.eql(result.join(''));
2727
});
2828
});
2929

@@ -32,14 +32,14 @@ describe('Utils', function() {
3232

3333
it('should return an asynchronous require loadChildren statement', function() {
3434
var result = [
35-
'loadChildren: () => new Promise(function (resolve) {\n',
36-
' (require as any).ensure([], function (require: any) {\n',
37-
' resolve(' + getRequireString(path, name) + ');\n',
38-
' });\n',
35+
'loadChildren: () => new Promise(function (resolve) {',
36+
' (require as any).ensure([], function (require: any) {',
37+
' resolve(' + getRequireString(path, name) + ');',
38+
' });',
3939
'})'
4040
];
4141

42-
getRequireLoader('path', 'name').should.eql(result.join(''));
42+
getRequireLoader('path', 'name', true).should.eql(result.join(''));
4343
});
4444
});
4545

@@ -48,13 +48,13 @@ describe('Utils', function() {
4848

4949
it('should return an asynchronous System.import loadChildren statement', function() {
5050
var result = [
51-
'loadChildren: () => System.import(\'' + path + '\')\n',
52-
' .then(function(module) {\n',
53-
' return module[\'' + name + '\'];\n',
51+
'loadChildren: () => System.import(\'' + path + '\')',
52+
' .then(function(module) {',
53+
' return module[\'' + name + '\'];',
5454
' })'
5555
];
5656

57-
getSystemLoader('path', 'name').should.eql(result.join(''));
57+
getSystemLoader('path', 'name', true).should.eql(result.join(''));
5858
});
5959
});
6060

Diff for: src/index.js

+17-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module.exports = function(source, sourcemap) {
66
this.cacheable && this.cacheable();
77

88
// regex for loadChildren string
9-
var loadChildrenRegex = /loadChildren:* ['|"](.*?)['|"]/gm;
9+
var loadChildrenRegex = /loadChildren: ['|"](.*?)['|"]/gm;
1010

1111
// parse query params
1212
var query = loaderUtils.parseQuery(this.query);
@@ -18,6 +18,8 @@ module.exports = function(source, sourcemap) {
1818
var factorySuffix = query.factorySuffix || 'NgFactory';
1919
var loader = query.loader || 'require';
2020
var genDir = query.genDir || '';
21+
var inline = query.inline || true;
22+
var debug = query.debug || false;
2123

2224
// get the filename path
2325
var resourcePath = this.resourcePath;
@@ -53,13 +55,24 @@ module.exports = function(source, sourcemap) {
5355

5456
filePath = utils.normalizeFilePath(filePath);
5557

58+
var replacement = match;
59+
5660
if (sync) {
57-
return utils.getSyncLoader(filePath, moduleName);
61+
replacement = utils.getSyncLoader(filePath, moduleName, inline);
5862
} else if (loader === 'system') {
59-
return utils.getSystemLoader(filePath, moduleName);
63+
replacement = utils.getSystemLoader(filePath, moduleName, inline);
6064
} else {
61-
return utils.getRequireLoader(filePath, moduleName);
65+
replacement = utils.getRequireLoader(filePath, moduleName, inline);
66+
}
67+
68+
if (debug) {
69+
console.log('[angular2-router-loader]: --DEBUG--');
70+
console.log('[angular2-router-loader]: File: ' + resourcePath);
71+
console.log('[angular2-router-loader]: Original: ' + match);
72+
console.log('[angular2-router-loader]: Replacement: ' + replacement);
6273
}
74+
75+
return replacement;
6376
});
6477

6578
if (this.callback) {

Diff for: src/utils.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
var os = require('os');
22
var path = require('path');
33

4-
module.exports.getRequireString = function(filePath, moduleName) {
4+
module.exports.getRequireString = function(filePath, moduleName, inline) {
55
return 'require(\'' + filePath + '\')[\'' + moduleName + '\']';
66
};
77

8-
module.exports.getSyncLoader = function(filePath, moduleName) {
8+
module.exports.getSyncLoader = function(filePath, moduleName, inline) {
99
var requireString = module.exports.getRequireString(filePath, moduleName);
1010

1111
var result = [
12-
'loadChildren: function() {\n',
13-
' return ' + requireString + ';\n',
12+
'loadChildren: function() {',
13+
' return ' + requireString + ';',
1414
'}'
1515
];
1616

17-
return result.join('');
17+
return inline ? result.join('') : result.join('\n');
1818
};
1919

20-
module.exports.getRequireLoader = function(filePath, moduleName) {
20+
module.exports.getRequireLoader = function(filePath, moduleName, inline) {
2121
var requireString = module.exports.getRequireString(filePath, moduleName);
2222

2323
var result = [
24-
'loadChildren: () => new Promise(function (resolve) {\n',
25-
' (require as any).ensure([], function (require: any) {\n',
26-
' resolve(' + requireString + ');\n',
27-
' });\n',
24+
'loadChildren: () => new Promise(function (resolve) {',
25+
' (require as any).ensure([], function (require: any) {',
26+
' resolve(' + requireString + ');',
27+
' });',
2828
'})'
2929
];
3030

31-
return result.join('');
31+
return inline ? result.join('') : result.join('\n');
3232
};
3333

34-
module.exports.getSystemLoader = function(filePath, moduleName) {
34+
module.exports.getSystemLoader = function(filePath, moduleName, inline) {
3535
var result = [
36-
'loadChildren: () => System.import(\'' + filePath + '\')\n',
37-
' .then(function(module) {\n',
38-
' return module[\'' + moduleName + '\'];\n',
36+
'loadChildren: () => System.import(\'' + filePath + '\')',
37+
' .then(function(module) {',
38+
' return module[\'' + moduleName + '\'];',
3939
' })'
4040
];
4141

42-
return result.join('');
42+
return inline ? result.join('') : result.join('\n');
4343
};
4444

4545
module.exports.getFilename = function(resourcePath) {

0 commit comments

Comments
 (0)