UNPKG

liftie

Version:

Clean, simple, easy to read, fast ski resort lift status

27 lines (20 loc) 737 B
const vm = require('node:vm'); const debug = require('debug')('liftie:resort:alta'); const select = require('../../select'); const { allText } = require('../../tools/domutil'); module.exports = parse; function extractLiftData(script) { const data = vm.runInNewContext(script, { window: Object.create(null) }); return data?.liftStatus?.lifts ?? {}; } function parse(dom) { const dataScript = select(dom, 'script') .map(script => allText(script).trim()) .find(script => script.includes('window.Alta = ')); const liftStatus = extractLiftData(dataScript).reduce((ls, { name, open }) => { ls[name] = open ? 'open' : 'closed'; return ls; }, {}); debug('Alta Lift Status:', liftStatus); return liftStatus; }