renovate/lib/modules/manager/terragrunt/providers.ts

56 lines
1.6 KiB
TypeScript
Raw Normal View History

import { newlineRegex, regEx } from '../../../util/regex';
2021-03-02 13:44:55 -07:00
import type { PackageDependency } from '../types';
import type { ExtractionResult, TerraformManagerData } from './types';
2021-05-11 11:08:02 -06:00
import { keyValueExtractionRegex } from './util';
2020-11-12 08:37:15 -07:00
export const sourceExtractionRegex = regEx(
/^(?:(?<hostname>(?:[a-zA-Z0-9]+\.+)+[a-zA-Z0-9]+)\/)?(?:(?<namespace>[^/]+)\/)?(?<type>[^/]+)/,
);
2020-11-12 08:37:15 -07:00
function extractBracesContent(content: string): number {
const stack: string[] = [];
2020-11-12 08:37:15 -07:00
let i = 0;
for (i; i < content.length; i += 1) {
if (content[i] === '{') {
stack.push(content[i]);
} else if (content[i] === '}') {
stack.pop();
if (stack.length === 0) {
break;
}
}
}
return i;
}
export function extractTerragruntProvider(
startingLine: number,
lines: string[],
moduleName: string,
2020-11-12 08:37:15 -07:00
): ExtractionResult {
const lineNumber = startingLine;
let line: string;
const deps: PackageDependency<TerraformManagerData>[] = [];
const managerData: TerraformManagerData = {
moduleName,
terragruntDependencyType: 'terraform',
2020-11-12 08:37:15 -07:00
};
const dep: PackageDependency<TerraformManagerData> = { managerData };
2020-11-12 08:37:15 -07:00
const teraformContent = lines
.slice(lineNumber)
.join('\n')
.substring(0, extractBracesContent(lines.slice(lineNumber).join('\n')))
.split(newlineRegex);
2020-11-12 08:37:15 -07:00
for (let lineNo = 0; lineNo < teraformContent.length; lineNo += 1) {
line = teraformContent[lineNo];
const kvGroups = keyValueExtractionRegex.exec(line)?.groups;
if (kvGroups) {
managerData.source = kvGroups.value;
managerData.sourceLine = lineNumber + lineNo;
2020-11-12 08:37:15 -07:00
}
}
deps.push(dep);
return { lineNumber, dependencies: deps };
}