60 lines
2.2 KiB
JavaScript
Executable file
60 lines
2.2 KiB
JavaScript
Executable file
"use strict";
|
|
/**
|
|
* @license
|
|
* Copyright Google LLC 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
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.trimNewlines = exports.stripIndents = exports.stripIndent = exports.indentBy = exports.oneLine = void 0;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function oneLine(strings, ...values) {
|
|
const endResult = String.raw(strings, ...values);
|
|
return endResult.replace(/(?:\r?\n(?:\s*))+/gm, ' ').trim();
|
|
}
|
|
exports.oneLine = oneLine;
|
|
function indentBy(indentations) {
|
|
let i = '';
|
|
while (indentations--) {
|
|
i += ' ';
|
|
}
|
|
return (strings, ...values) => {
|
|
return i + stripIndent(strings, ...values).replace(/\n/g, '\n' + i);
|
|
};
|
|
}
|
|
exports.indentBy = indentBy;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function stripIndent(strings, ...values) {
|
|
const endResult = String.raw(strings, ...values);
|
|
// remove the shortest leading indentation from each line
|
|
const match = endResult.match(/^[ \t]*(?=\S)/gm);
|
|
// return early if there's nothing to strip
|
|
if (match === null) {
|
|
return endResult;
|
|
}
|
|
const indent = Math.min(...match.map((el) => el.length));
|
|
const regexp = new RegExp('^[ \\t]{' + indent + '}', 'gm');
|
|
return (indent > 0 ? endResult.replace(regexp, '') : endResult).trim();
|
|
}
|
|
exports.stripIndent = stripIndent;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function stripIndents(strings, ...values) {
|
|
return String.raw(strings, ...values)
|
|
.split('\n')
|
|
.map((line) => line.trim())
|
|
.join('\n')
|
|
.trim();
|
|
}
|
|
exports.stripIndents = stripIndents;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function trimNewlines(strings, ...values) {
|
|
const endResult = String.raw(strings, ...values);
|
|
return (endResult
|
|
// Remove the newline at the start.
|
|
.replace(/^(?:\r?\n)+/, '')
|
|
// Remove the newline at the end and following whitespace.
|
|
.replace(/(?:\r?\n(?:\s*))$/, ''));
|
|
}
|
|
exports.trimNewlines = trimNewlines;
|