Files
renovate/lib/manager/html/extract.ts
T
2020-03-01 08:01:12 +01:00

50 lines
1.3 KiB
TypeScript

import { PackageFile, PackageDependency } from '../common';
import * as datasourceCdnjs from '../../datasource/cdnjs';
import { cloudflareUrlRegex } from '../cdnurl/extract';
const regex = /<\s*(script|link)\s+[^>]*?\/?>/i;
const integrityRegex = /\s+integrity\s*=\s*("|')(?<currentDigest>[^"']+)/;
export function extractDep(tag: string): PackageDependency | null {
const match = cloudflareUrlRegex.exec(tag);
if (!match) {
return null;
}
const { depName, currentValue, asset } = match.groups;
const dep: PackageDependency = {
datasource: datasourceCdnjs.id,
depName,
lookupName: `${depName}/${asset}`,
currentValue,
};
const integrityMatch = integrityRegex.exec(tag);
if (integrityMatch) {
dep.currentDigest = integrityMatch.groups.currentDigest;
}
return dep;
}
export function extractPackageFile(content: string): PackageFile {
const deps: PackageDependency[] = [];
let rest = content;
let match = regex.exec(rest);
let offset = 0;
while (match) {
const [replaceString] = match;
offset += match.index + replaceString.length;
rest = content.slice(offset);
match = regex.exec(rest);
const dep = extractDep(replaceString);
if (dep) {
deps.push({
...dep,
autoReplaceData: {
replaceString,
},
});
}
}
return { deps };
}