iab-vast-parser
Version:
Parses IAB VAST tags into iab-vast-model objects.
49 lines (45 loc) • 1.36 kB
JavaScript
import {VAST, AdPod} from 'iab-vast-model'
import createAd from './ad'
const triageAds = ($$ads) => {
const $$adsWithSequence = []
const $$adsWithoutSequence = []
for (let i = 0; i < $$ads.length; ++i) {
const $ad = $$ads[i]
if (typeof $ad.sequence !== 'undefined') {
$$adsWithSequence.push($ad)
} else {
$$adsWithoutSequence.push($ad)
}
}
return [$$adsWithSequence, $$adsWithoutSequence]
}
const createVAST = ($vast, options) => {
const vast = new VAST()
vast.version = $vast.version
vast.errors.push(...$vast.error
.map((err) => err._value)
.filter((uri) => (uri !== '')))
const [$$adsWithSequence, $$adsWithoutSequence] = triageAds($vast.ad)
if ($$adsWithSequence.length > 0) {
if (options.noSingleAdPods &&
$vast.ad.length === 1 && $$adsWithSequence.length === 1) {
$$adsWithoutSequence.push($$adsWithSequence[0])
} else {
vast.adPod = new AdPod()
for (let i = 0; i < $$adsWithSequence.length; i++) {
vast.adPod.ads.add(createAd($$adsWithSequence[i], options))
}
}
}
for (let i = 0; i < $$adsWithoutSequence.length; i++) {
vast.ads.add(createAd($$adsWithoutSequence[i], options))
}
return vast
}
export default ($vast, options) => {
try {
return createVAST($vast, options)
} catch (err) {
options.errorHandler(err)
}
}