Skip to content

Commit bd66a69

Browse files
author
Val
committed
base implementation and tests
1 parent 5083be7 commit bd66a69

File tree

4 files changed

+123
-12
lines changed

4 files changed

+123
-12
lines changed

index.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1+
var _ = require('lodash');
2+
var utils = require('loader-utils');
3+
14
module.exports = function (source) {
2-
console.log(source);
5+
var query = utils.parseQuery(this.query);
6+
var subject = query['subject'];
7+
var replacement = query['replacement'];
8+
var flags = query['flags'];
9+
10+
if (_.isString(subject) && _.isString(replacement)) {
11+
if (_.isString(flags)) {
12+
subject = new RegExp(subject, flags);
13+
}
14+
15+
source = source.replace(subject, replacement);
16+
}
17+
318
return source;
419
};

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
"test": "mocha"
1111
},
1212
"main": "index.js",
13-
"dependencies": {},
13+
"dependencies": {
14+
"loader-utils": "^0.2.11",
15+
"lodash": "^3.10.1"
16+
},
1417
"devDependencies": {
1518
"chai": "^3.2.0",
1619
"mocha": "^2.3.2",

test/index.test.js

Lines changed: 102 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,126 @@
11
var path = require('path');
2+
var fs = require('fs');
23
var expect = require('chai').expect;
34
var webpack = require('webpack');
45

6+
var entryFilePath = path.join(__dirname, 'source/entry.js');
7+
var outputDirPath = path.join(__dirname, 'build');
8+
var outputFileName = 'build.js';
9+
var outputFilePath = path.join(outputDirPath, outputFileName);
10+
511
describe('Webpack replace loader ...', function () {
612

7-
it('should replace', function (done) {
13+
it('should replace with string subject', function (done) {
14+
webpack(
15+
{
16+
entry: entryFilePath,
17+
output: {
18+
path: outputDirPath,
19+
filename: outputFileName
20+
},
21+
module: {
22+
loaders: [
23+
{
24+
test: /\.js$/,
25+
loader: '__this',
26+
query: {
27+
subject: 'var value',
28+
replacement: 'var v'
29+
}
30+
}
31+
]
32+
}
33+
},
34+
function (error, stats) {
35+
expect(error).to.equal(null);
36+
37+
fs.readFile(outputFilePath, 'utf8', function (error, contents) {
38+
expect(error).to.equal(null);
39+
expect(contents).to.be.a('string');
40+
expect(contents.indexOf('var value')).to.equal(-1);
41+
expect(contents.indexOf('var v')).to.not.equal(-1);
42+
done();
43+
});
44+
}
45+
);
46+
});
47+
48+
it('should replace with pattern subject', function (done) {
849
webpack(
950
{
10-
entry: path.join(__dirname, 'source/entry.js'),
51+
entry: entryFilePath,
1152
output: {
12-
path: path.join(__dirname, 'build'),
13-
filename: 'build.js'
53+
path: outputDirPath,
54+
filename: outputFileName
1455
},
1556
module: {
1657
loaders: [
1758
{
1859
test: /\.js$/,
19-
loaders: [
20-
'__this'
21-
]
60+
loader: '__this',
61+
query: {
62+
subject: 'var VALUE = \'\.*\'',
63+
replacement: 'var v = \'\'',
64+
flags: 'i'
65+
}
66+
}
67+
]
68+
}
69+
},
70+
function (error, stats) {
71+
expect(error).to.equal(null);
72+
73+
fs.readFile(outputFilePath, 'utf8', function (error, contents) {
74+
expect(error).to.equal(null);
75+
expect(contents).to.be.a('string');
76+
expect(contents.indexOf('var value')).to.equal(-1);
77+
expect(contents.indexOf('var v = \'\'')).to.not.equal(-1);
78+
done();
79+
});
80+
}
81+
);
82+
});
83+
84+
it('should replace scoped', function (done) {
85+
webpack(
86+
{
87+
entry: entryFilePath,
88+
output: {
89+
path: outputDirPath,
90+
filename: outputFileName
91+
},
92+
module: {
93+
loaders: [
94+
{
95+
test: /\.js$/,
96+
loader: '__this',
97+
query: {
98+
subject: 'var value',
99+
replacement: 'var v'
100+
}
101+
},
102+
{
103+
test: /bar\.js$/,
104+
loader: '__this',
105+
query: {
106+
subject: 'var value',
107+
replacement: 'var bar'
108+
}
22109
}
23110
]
24111
}
25112
},
26113
function (error, stats) {
27114
expect(error).to.equal(null);
28115

29-
expect(1).to.equal(1);
30-
done();
116+
fs.readFile(outputFilePath, 'utf8', function (error, contents) {
117+
expect(error).to.equal(null);
118+
expect(contents).to.be.a('string');
119+
expect(contents.indexOf('var value')).to.equal(-1);
120+
expect(contents.indexOf('var v')).to.not.equal(-1);
121+
expect(contents.indexOf('var bar')).to.not.equal(-1);
122+
done();
123+
});
31124
}
32125
);
33126
});

test/source/bar.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
var value = 'baz';
1+
var value = 'bar';
22

33
module.exports = value;

0 commit comments

Comments
 (0)