mirror of
https://github.com/renovatebot/renovate.git
synced 2026-11-03 02:53:40 +00:00
6293edc19a
Co-Authored-By: Michael Kriese <michael.kriese@visualon.de>
50 lines
1.3 KiB
TypeScript
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 };
|
|
}
|