[ADD] nested calls template
This commit is contained in:
parent
55816cdd4d
commit
dab1de90bf
2 changed files with 35 additions and 3 deletions
|
|
@ -135,9 +135,33 @@ const createStyler = (open, close, parent) => {
|
|||
|
||||
const createBuilder = (self, _styler, _isEmpty) => {
|
||||
const builder = (...arguments_) => {
|
||||
// Single argument is hot path, implicit coercion is faster than anything
|
||||
// eslint-disable-next-line no-implicit-coercion
|
||||
return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
|
||||
if (arguments_.length === 1) {
|
||||
return applyStyle(builder, String(arguments_[0]));
|
||||
}
|
||||
|
||||
const [firstString] = arguments_;
|
||||
|
||||
if (!Array.isArray(firstString)) {
|
||||
// If chalk() was called by itself or with a string,
|
||||
// return the string itself as a string.
|
||||
return applyStyle(builder, arguments_.join(' '));
|
||||
}
|
||||
|
||||
arguments_ = arguments_.slice(1);
|
||||
const parts = [firstString.raw[0]];
|
||||
|
||||
for (let i = 1; i < firstString.length; i++) {
|
||||
parts.push(
|
||||
String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
|
||||
String(firstString.raw[i])
|
||||
);
|
||||
}
|
||||
|
||||
if (template === undefined) {
|
||||
template = require('./templates');
|
||||
}
|
||||
|
||||
return template(chalk, parts.join(''));
|
||||
};
|
||||
|
||||
// We alter the prototype because we must return a function, but there is
|
||||
|
|
|
|||
|
|
@ -175,3 +175,11 @@ test('should allow bracketed Unicode escapes', t => {
|
|||
t.is(instance`This is a {bold \u{AB681}} test`, 'This is a \u001B[1m\u{AB681}\u001B[22m test');
|
||||
t.is(instance`This is a {bold \u{10FFFF}} test`, 'This is a \u001B[1m\u{10FFFF}\u001B[22m test');
|
||||
});
|
||||
|
||||
test('should support nested calls', t => {
|
||||
const instance = new chalk.Instance({level: 3});
|
||||
const name = 'Sindre';
|
||||
const exclamation = 'Neat';
|
||||
const result = instance.bold`{bold Hello, {cyan.inverse ${name}!} This is a test. {green ${exclamation}!}}`;
|
||||
t.is(result, '\u001B[1mHello, \u001B[22m\u001B[1m\u001B[36m\u001B[7mSindre!\u001B[27m\u001B[39m\u001B[22m\u001B[1m This is a test. \u001B[22m\u001B[1m\u001B[32mNeat!\u001B[39m\u001B[22m');
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue