You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					60 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					60 lines
				
				1.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function dedent(strings) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var raw = void 0;
							 | 
						||
| 
								 | 
							
								  if (typeof strings === "string") {
							 | 
						||
| 
								 | 
							
								    // dedent can be used as a plain function
							 | 
						||
| 
								 | 
							
								    raw = [strings];
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    raw = strings.raw;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // first, perform interpolation
							 | 
						||
| 
								 | 
							
								  var result = "";
							 | 
						||
| 
								 | 
							
								  for (var i = 0; i < raw.length; i++) {
							 | 
						||
| 
								 | 
							
								    result += raw[i].
							 | 
						||
| 
								 | 
							
								    // join lines when there is a suppressed newline
							 | 
						||
| 
								 | 
							
								    replace(/\\\n[ \t]*/g, "").
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // handle escaped backticks
							 | 
						||
| 
								 | 
							
								    replace(/\\`/g, "`");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (i < (arguments.length <= 1 ? 0 : arguments.length - 1)) {
							 | 
						||
| 
								 | 
							
								      result += arguments.length <= i + 1 ? undefined : arguments[i + 1];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // now strip indentation
							 | 
						||
| 
								 | 
							
								  var lines = result.split("\n");
							 | 
						||
| 
								 | 
							
								  var mindent = null;
							 | 
						||
| 
								 | 
							
								  lines.forEach(function (l) {
							 | 
						||
| 
								 | 
							
								    var m = l.match(/^(\s+)\S+/);
							 | 
						||
| 
								 | 
							
								    if (m) {
							 | 
						||
| 
								 | 
							
								      var indent = m[1].length;
							 | 
						||
| 
								 | 
							
								      if (!mindent) {
							 | 
						||
| 
								 | 
							
								        // this is the first indented line
							 | 
						||
| 
								 | 
							
								        mindent = indent;
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        mindent = Math.min(mindent, indent);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (mindent !== null) {
							 | 
						||
| 
								 | 
							
								    result = lines.map(function (l) {
							 | 
						||
| 
								 | 
							
								      return l[0] === " " ? l.slice(mindent) : l;
							 | 
						||
| 
								 | 
							
								    }).join("\n");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // dedent eats leading and trailing whitespace too
							 | 
						||
| 
								 | 
							
								  result = result.trim();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // handle escaped newlines at the end to ensure they don't get stripped too
							 | 
						||
| 
								 | 
							
								  return result.replace(/\\n/g, "\n");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (typeof module !== "undefined") {
							 | 
						||
| 
								 | 
							
								  module.exports = dedent;
							 | 
						||
| 
								 | 
							
								}
							 |