preload-links-by-lighthouse
Version:
Generate html with embedded preload links using lighthouse
37 lines (31 loc) • 1.19 kB
text/typescript
import { NetworkRecord } from './lighthouse';
export type HrefMapper = (networkRecord: NetworkRecord) => string;
export type AsMapper = (networkRecord: NetworkRecord) => string | undefined;
export const DEFAULT_HREF_MAPPER: HrefMapper = (networkRecord) => networkRecord.url;
export const DEFAULT_AS_MAPPER: AsMapper = (networkRecord) => {
if (networkRecord.resourceType === 'Script') return 'script';
return undefined;
};
export type GeneratePreloadLinksArgs = {
networkRecords: NetworkRecord[];
hrefMapper?: HrefMapper;
asMapper?: AsMapper;
};
export function generatePreloadLinks(args: GeneratePreloadLinksArgs): string {
const hrefMapper = args.hrefMapper ?? DEFAULT_HREF_MAPPER;
const asMapper = args.asMapper ?? DEFAULT_AS_MAPPER;
return args.networkRecords
.map((networkRecord) => {
const href = hrefMapper(networkRecord);
const as = asMapper(networkRecord);
if (href.startsWith('data')) {
console.log(networkRecord);
}
let preloadLink = `<link rel="preload"`;
preloadLink += ` href="${href}"`;
if (as) preloadLink += ` as="${as}"`;
preloadLink += `>`;
return preloadLink;
})
.join('\n');
}