type AdMap = {
[key: string]: any;
};
function pad(num: number): string {
const s = num.toString();
return s.padStart(2, "0");
}
function toHHMMSS(timeInSeconds: number): string {
const hours = Math.floor(timeInSeconds / 3600);
const minutes = Math.floor((timeInSeconds % 3600) / 60);
const seconds = timeInSeconds % 60;
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.000`;
}
function convertOffset(offset: any): string {
if (typeof offset === "number") {
return toHHMMSS(offset);
} else if (typeof offset === "string") {
if (offset === "postroll") {
return "end";
}
const floatOffset = parseFloat(offset);
return isNaN(floatOffset) ? offset : toHHMMSS(floatOffset);
} else {
return toHHMMSS(0);
}
}
function createAdBreak(ad: AdMap): string {
const offset = ad["offset"];
const id = offset.toString();
const timestamp = convertOffset(offset);
const url = ad["ad_url"].toString().trim();
return `
`.trim();
}
export function createVMAP(ads: AdMap[]): string {
const header =
'';
const footer = "";
return [header, ...ads.map(createAdBreak), footer].join("\n");
}