29 lines
941 B
TypeScript
29 lines
941 B
TypeScript
|
/**
|
||
|
* @license
|
||
|
* Copyright Google Inc. All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by an MIT-style license that can be
|
||
|
* found in the LICENSE file at https://angular.io/license
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Template string function that can be used to dedent the resulting
|
||
|
* string literal. The smallest common indentation will be omitted.
|
||
|
*/
|
||
|
export function dedent(strings: TemplateStringsArray, ...values: any[]) {
|
||
|
let joinedString = '';
|
||
|
for (let i = 0; i < values.length; i++) {
|
||
|
joinedString += `${strings[i]}${values[i]}`;
|
||
|
}
|
||
|
joinedString += strings[strings.length - 1];
|
||
|
|
||
|
const matches = joinedString.match(/^[ \t]*(?=\S)/gm);
|
||
|
if (matches === null) {
|
||
|
return joinedString;
|
||
|
}
|
||
|
|
||
|
const minLineIndent = Math.min(...matches.map(el => el.length));
|
||
|
const omitMinIndentRegex = new RegExp(`^[ \\t]{${minLineIndent}}`, 'gm');
|
||
|
return minLineIndent > 0 ? joinedString.replace(omitMinIndentRegex, '') : joinedString;
|
||
|
}
|