stripIndent.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. var isStr = require('./isStr');
  2. var toArr = require('./toArr');
  3. var min = require('./min');
  4. var map = require('./map');
  5. var trim = require('./trim');
  6. exports = function(literals) {
  7. if (isStr(literals)) literals = toArr(literals);
  8. var str = '';
  9. for (
  10. var _len = arguments.length,
  11. placeholders = new Array(_len > 1 ? _len - 1 : 0),
  12. _key = 1;
  13. _key < _len;
  14. _key++
  15. ) {
  16. placeholders[_key - 1] = arguments[_key];
  17. }
  18. for (var i = 0, len = literals.length; i < len; i++) {
  19. str += literals[i];
  20. if (placeholders[i]) str += placeholders[i];
  21. }
  22. var lines = str.split('\n');
  23. var indentLens = [];
  24. for (var _i = 0, _len2 = lines.length; _i < _len2; _i++) {
  25. var line = lines[_i];
  26. var _indent = line.match(regStartSpaces);
  27. if (_indent) {
  28. indentLens.push(_indent[1].length);
  29. }
  30. }
  31. var indent = indentLens.length > 0 ? min.apply(null, indentLens) : 0;
  32. return trim(
  33. map(lines, function(line) {
  34. return line[0] === ' ' ? line.slice(indent) : line;
  35. }).join('\n')
  36. );
  37. };
  38. var regStartSpaces = /^(\s+)\S+/;
  39. module.exports = exports;