string-cooked.js 901 B

123456789101112131415161718192021222324
  1. var uncurryThis = require('../internals/function-uncurry-this');
  2. var toIndexedObject = require('../internals/to-indexed-object');
  3. var toString = require('../internals/to-string');
  4. var lengthOfArrayLike = require('../internals/length-of-array-like');
  5. var $TypeError = TypeError;
  6. var push = uncurryThis([].push);
  7. var join = uncurryThis([].join);
  8. module.exports = function cooked(template /* , ...substitutions */) {
  9. var cookedTemplate = toIndexedObject(template);
  10. var literalSegments = lengthOfArrayLike(cookedTemplate);
  11. var argumentsLength = arguments.length;
  12. var elements = [];
  13. var i = 0;
  14. while (true) {
  15. var nextVal = cookedTemplate[i++];
  16. if (nextVal === undefined) throw $TypeError('Incorrect template');
  17. push(elements, toString(nextVal));
  18. if (i === literalSegments) return join(elements, '');
  19. if (i < argumentsLength) push(elements, toString(arguments[i]));
  20. }
  21. };