75 lines
4.6 KiB
JavaScript
75 lines
4.6 KiB
JavaScript
const SCISSOR = '------------------------ >8 ------------------------';
|
|
/**
|
|
* Remove leading and trailing newlines.
|
|
* @param input
|
|
* @returns String without leading and trailing newlines.
|
|
*/
|
|
export function trimNewLines(input) {
|
|
// To escape ReDos we should escape String#replace with regex.
|
|
const matches = input.match(/[^\r\n]/);
|
|
if (typeof matches?.index !== 'number') {
|
|
return '';
|
|
}
|
|
const firstIndex = matches.index;
|
|
let lastIndex = input.length - 1;
|
|
while (input[lastIndex] === '\r' || input[lastIndex] === '\n') {
|
|
lastIndex--;
|
|
}
|
|
return input.substring(firstIndex, lastIndex + 1);
|
|
}
|
|
/**
|
|
* Append a newline to a string.
|
|
* @param src
|
|
* @param line
|
|
* @returns String with appended newline.
|
|
*/
|
|
export function appendLine(src, line) {
|
|
return src ? `${src}\n${line || ''}` : line || '';
|
|
}
|
|
/**
|
|
* Creates a function that filters out comments lines.
|
|
* @param char
|
|
* @returns Comment filter function.
|
|
*/
|
|
export function getCommentFilter(char) {
|
|
return char
|
|
? (line) => !line.startsWith(char)
|
|
: () => true;
|
|
}
|
|
/**
|
|
* Select lines before the scissor.
|
|
* @param lines
|
|
* @param commentChar
|
|
* @returns Lines before the scissor.
|
|
*/
|
|
export function truncateToScissor(lines, commentChar) {
|
|
const scissorIndex = lines.indexOf(`${commentChar} ${SCISSOR}`);
|
|
if (scissorIndex === -1) {
|
|
return lines;
|
|
}
|
|
return lines.slice(0, scissorIndex);
|
|
}
|
|
/**
|
|
* Filter out GPG sign lines.
|
|
* @param line
|
|
* @returns True if the line is not a GPG sign line.
|
|
*/
|
|
export function gpgFilter(line) {
|
|
return !line.match(/^\s*gpg:/);
|
|
}
|
|
/**
|
|
* Assign matched correspondence to the target object.
|
|
* @param target - The target object to assign values to.
|
|
* @param matches - The RegExp match array containing the matched groups.
|
|
* @param correspondence - An array of keys that correspond to the matched groups.
|
|
* @returns The target object with assigned values.
|
|
*/
|
|
export function assignMatchedCorrespondence(target, matches, correspondence) {
|
|
const { groups } = matches;
|
|
for (let i = 0, len = correspondence.length, key; i < len; i++) {
|
|
key = correspondence[i];
|
|
target[key] = (groups ? groups[key] : matches[i + 1]) || null;
|
|
}
|
|
return target;
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLEdBQUcsc0RBQXNELENBQUE7QUFFdEU7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN4Qyw4REFBOEQ7SUFFOUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV0QyxJQUFJLE9BQU8sT0FBTyxFQUFFLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO0lBQ2hDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBRWhDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUQsU0FBUyxFQUFFLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDbkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFrQixFQUFFLElBQXdCO0lBQ3JFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBd0I7SUFDdkQsT0FBTyxJQUFJO1FBQ1QsQ0FBQyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUE7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUFlLEVBQ2YsV0FBbUI7SUFFbkIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBRS9ELElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxNQUFxQyxFQUNyQyxPQUF5QixFQUN6QixjQUF3QjtJQUV4QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDL0QsR0FBRyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIn0=
|