2022-03-03 02:35:26 -07:00
|
|
|
import { newlineRegex, regEx } from '../../../util/regex';
|
2021-03-02 13:44:55 -07:00
|
|
|
import type { PackageDependency } from '../types';
|
2022-04-19 22:19:59 -06:00
|
|
|
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
|
|
|
|
2021-10-19 22:38:49 -06:00
|
|
|
export const sourceExtractionRegex = regEx(
|
2023-11-07 08:50:29 -07:00
|
|
|
/^(?:(?<hostname>(?:[a-zA-Z0-9]+\.+)+[a-zA-Z0-9]+)\/)?(?:(?<namespace>[^/]+)\/)?(?<type>[^/]+)/,
|
2021-10-19 22:38:49 -06:00
|
|
|
);
|
2020-11-12 08:37:15 -07:00
|
|
|
|
2022-01-06 01:53:01 -07:00
|
|
|
function extractBracesContent(content: string): number {
|
2022-04-19 22:19:59 -06:00
|
|
|
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[],
|
2023-11-07 08:50:29 -07:00
|
|
|
moduleName: string,
|
2020-11-12 08:37:15 -07:00
|
|
|
): ExtractionResult {
|
|
|
|
const lineNumber = startingLine;
|
|
|
|
let line: string;
|
2022-04-19 22:19:59 -06:00
|
|
|
const deps: PackageDependency<TerraformManagerData>[] = [];
|
|
|
|
const managerData: TerraformManagerData = {
|
2022-01-06 01:53:01 -07:00
|
|
|
moduleName,
|
2022-11-05 03:12:03 -06:00
|
|
|
terragruntDependencyType: 'terraform',
|
2020-11-12 08:37:15 -07:00
|
|
|
};
|
2022-04-19 22:19:59 -06: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')))
|
2022-02-02 00:31:11 -07:00
|
|
|
.split(newlineRegex);
|
2020-11-12 08:37:15 -07:00
|
|
|
|
|
|
|
for (let lineNo = 0; lineNo < teraformContent.length; lineNo += 1) {
|
|
|
|
line = teraformContent[lineNo];
|
2022-01-06 01:53:01 -07:00
|
|
|
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 };
|
|
|
|
}
|