Skip to content

Commit 5f8b536

Browse files
author
Adam Jenkins
committed
Allows interpolation of stuff other than just strings
1 parent 2c23bc8 commit 5f8b536

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/interpolate.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,26 @@ export const defaultInterpolation = /\{\{\s*(.+?)\s*\}\}/g
22

33
export const needsInterpolation = (rule,regexp) => regexp.test(rule.toJSON(true));
44

5+
const interpolate = (subject = '', params = {}, regexp, resolver) => {
6+
let shouldReplaceFull, found;
7+
8+
const replaced = subject.replace(regexp, (full, matched) => {
9+
shouldReplaceFull = full === subject;
10+
found = resolver(params, matched);
11+
return shouldReplaceFull ? '' : found;
12+
});
13+
14+
return shouldReplaceFull ? found : replaced;
15+
};
16+
17+
518
export const interpolateDeep = (o, params, regexp, resolver) => {
619
if (!o || typeof o === 'number' || typeof o === 'boolean') return o;
720

8-
if (typeof o === 'string') return o.replace(regexp, (_, matched) => resolver(params,matched))
21+
if (typeof o === 'string') return interpolate(o,params,regexp,resolver)
922

1023
if (Array.isArray(o)) return o.map(t => interpolateDeep(t, params, regexp, resolver));
1124

1225
return Object.entries(o).reduce((acc, [k, v]) => ({...acc,[k]: interpolateDeep(v, params, regexp, resolver)}),{});
13-
};
26+
};
27+

0 commit comments

Comments
 (0)