| 'use strict'; | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var toIndexedObject = require('../internals/to-indexed-object'); | 
| var toString = require('../internals/to-string'); | 
| var lengthOfArrayLike = require('../internals/length-of-array-like'); | 
|   | 
| var $TypeError = TypeError; | 
| var push = uncurryThis([].push); | 
| var join = uncurryThis([].join); | 
|   | 
| // `String.cooked` method | 
| // https://tc39.es/proposal-string-cooked/ | 
| module.exports = function cooked(template /* , ...substitutions */) { | 
|   var cookedTemplate = toIndexedObject(template); | 
|   var literalSegments = lengthOfArrayLike(cookedTemplate); | 
|   if (!literalSegments) return ''; | 
|   var argumentsLength = arguments.length; | 
|   var elements = []; | 
|   var i = 0; | 
|   while (true) { | 
|     var nextVal = cookedTemplate[i++]; | 
|     if (nextVal === undefined) throw new $TypeError('Incorrect template'); | 
|     push(elements, toString(nextVal)); | 
|     if (i === literalSegments) return join(elements, ''); | 
|     if (i < argumentsLength) push(elements, toString(arguments[i])); | 
|   } | 
| }; |