Skip to content
This repository was archived by the owner on Aug 4, 2021. It is now read-only.

Commit 59cfd0b

Browse files
committed
Test plugin options are not used as replacements
1 parent abe4073 commit 59cfd0b

File tree

8 files changed

+60
-27
lines changed

8 files changed

+60
-27
lines changed

src/index.js

+22-18
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,48 @@ function escape(str) {
55
return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
66
}
77

8-
function functor(thing) {
9-
if (typeof thing === 'function') return thing;
10-
return () => thing;
8+
function ensureFunction(functionOrValue) {
9+
if (typeof functionOrValue === 'function') return functionOrValue;
10+
return () => functionOrValue;
1111
}
1212

1313
function longest(a, b) {
1414
return b.length - a.length;
1515
}
1616

17-
export default function replace(options = {}) {
18-
const filter = createFilter(options.include, options.exclude);
19-
const { delimiters } = options;
20-
21-
let values;
22-
17+
function getReplacements (options) {
2318
if (options.values) {
24-
values = Object.assign({}, options.values);
19+
return Object.assign({}, options.values);
2520
} else {
26-
values = Object.assign({}, options);
21+
const values = Object.assign({}, options);
2722
delete values.delimiters;
2823
delete values.include;
2924
delete values.exclude;
25+
delete values.sourcemap;
26+
delete values.sourceMap;
27+
return values;
3028
}
29+
}
30+
31+
function mapToFunctions(object) {
32+
return Object.keys(object).reduce((functions, key) => {
33+
functions[key] = ensureFunction(object[key]);
34+
return functions;
35+
}, {});
36+
}
3137

32-
const keys = Object.keys(values)
38+
export default function replace(options = {}) {
39+
const filter = createFilter(options.include, options.exclude);
40+
const { delimiters } = options;
41+
const functionValues = mapToFunctions(getReplacements(options));
42+
const keys = Object.keys(functionValues)
3343
.sort(longest)
3444
.map(escape);
3545

3646
const pattern = delimiters
3747
? new RegExp(`${escape(delimiters[0])}(${keys.join('|')})${escape(delimiters[1])}`, 'g')
3848
: new RegExp(`\\b(${keys.join('|')})\\b`, 'g');
3949

40-
// convert all values to functions
41-
const functionValues = Object.keys(values).reduce((acc, key) => {
42-
acc[key] = functor(values[key]);
43-
return acc;
44-
}, {});
45-
4650
return {
4751
name: 'replace',
4852

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module.exports = {
2+
description: 'does not replace plugin options',
3+
options: {
4+
original: 'replaced',
5+
delimiters: ['', ''],
6+
sourcemap: true,
7+
sourceMap: true,
8+
include: '**/input.js',
9+
exclude: 'node_modules/**'
10+
}
11+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
console.log(`
2+
original
3+
delimiters
4+
sourcemap
5+
sourceMap
6+
include
7+
exclude
8+
`);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
console.log(`
2+
replaced
3+
delimiters
4+
sourcemap
5+
sourceMap
6+
include
7+
exclude
8+
`);
+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module.exports = {
22
description: 'allows replacement to be a function',
33
options: {
4-
__filename: id => JSON.stringify(`dist/${id}`)
4+
__filename(id) {
5+
return JSON.stringify(id.slice(__dirname.length + 1));
6+
}
57
}
68
};
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default "dist/input.js";
1+
export default "input.js";

test/function/replacement-function/main.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import foo from './dir/foo.js';
22

33
var bar = __filename;
44

5-
assert.equal(foo, 'dir/foo.js');
5+
assert.ok(foo.match('^dir[\\/]foo.js$'));
66
assert.equal(bar, 'main.js');

test/test.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ describe('rollup-plugin-replace', () => {
5555
const input = fs.readFileSync(`form/${dir}/input.js`, 'utf-8');
5656
const expected = fs.readFileSync(`form/${dir}/output.js`, 'utf-8').trim();
5757

58-
return Promise.resolve(transform.call(transformContext, input, 'input.js')).then(
59-
transformed => {
60-
const actual = (transformed ? transformed.code : input).trim();
61-
assert.equal(actual, expected);
62-
}
63-
);
58+
return Promise.resolve(
59+
transform.call(transformContext, input, `${__dirname}/form/${dir}/input.js`)
60+
).then(transformed => {
61+
const actual = (transformed ? transformed.code : input).trim();
62+
assert.equal(actual, expected);
63+
});
6464
});
6565
});
6666
});

0 commit comments

Comments
 (0)