import { regEx } from '../../../util/regex.ts'; import { CdnjsDatasource } from '../../datasource/cdnjs/index.ts'; import type { PackageDependency, PackageFileContent } from '../types.ts'; export const cloudflareUrlRegex = regEx( /\/\/cdnjs\.cloudflare\.com\/ajax\/libs\/(?[^/]+?)\/(?[^/]+?)\/(?[-/_.a-zA-Z0-9]+)/, ); export function extractPackageFile(content: string): PackageFileContent { const deps: PackageDependency[] = []; let rest = content; let match = cloudflareUrlRegex.exec(rest); let offset = 0; while (match?.groups) { const [wholeSubstr] = match; const { depName, currentValue, asset } = match.groups; offset += match.index + wholeSubstr.length; rest = content.slice(offset); match = cloudflareUrlRegex.exec(rest); deps.push({ datasource: CdnjsDatasource.id, depName, packageName: `${depName}/${asset}`, currentValue, }); } return { deps }; }