1*f0df9794SNeil Fullerconst osmBoundarySources = require('./osmBoundarySources.json') 2*f0df9794SNeil Fullerconst zoneCfg = require('./timezones.json') 3*f0df9794SNeil Fullerconst expectedZoneOverlaps = require('./expectedZoneOverlaps.json') 4*f0df9794SNeil Fuller 5*f0df9794SNeil Fullerlet numErrors = 0 6*f0df9794SNeil Fuller 7*f0df9794SNeil Fullerconst sourcesUsage = {} 8*f0df9794SNeil FullerObject.keys(osmBoundarySources).forEach(source => { 9*f0df9794SNeil Fuller sourcesUsage[source] = false 10*f0df9794SNeil Fuller}) 11*f0df9794SNeil Fuller 12*f0df9794SNeil FullerObject.keys(zoneCfg).forEach(zone => { 13*f0df9794SNeil Fuller zoneCfg[zone].forEach((operation, idx) => { 14*f0df9794SNeil Fuller if (operation.source === 'overpass') { 15*f0df9794SNeil Fuller // check if source is defined 16*f0df9794SNeil Fuller if (!osmBoundarySources[operation.id]) { 17*f0df9794SNeil Fuller numErrors++ 18*f0df9794SNeil Fuller 19*f0df9794SNeil Fuller console.error(`No osmBoundarySources config found for entry: ${operation.id}`) 20*f0df9794SNeil Fuller } else { 21*f0df9794SNeil Fuller sourcesUsage[operation.id] = true 22*f0df9794SNeil Fuller } 23*f0df9794SNeil Fuller } else if (operation.source.indexOf('manual') > -1 && 24*f0df9794SNeil Fuller (!operation.description || 25*f0df9794SNeil Fuller operation.description.length < 3)) { 26*f0df9794SNeil Fuller numErrors++ 27*f0df9794SNeil Fuller 28*f0df9794SNeil Fuller console.error(`No description of ${operation.source} for operation ${idx} of zone: ${zone}`) 29*f0df9794SNeil Fuller } 30*f0df9794SNeil Fuller }) 31*f0df9794SNeil Fuller}) 32*f0df9794SNeil Fuller 33*f0df9794SNeil Fuller// check for sources not used in timezone building 34*f0df9794SNeil FullerObject.keys(sourcesUsage).forEach(source => { 35*f0df9794SNeil Fuller if (!sourcesUsage[source]) { 36*f0df9794SNeil Fuller numErrors++ 37*f0df9794SNeil Fuller console.error(`osmBoundarySources config "${source}" is never used in timezone boundary building`) 38*f0df9794SNeil Fuller } 39*f0df9794SNeil Fuller}) 40*f0df9794SNeil Fuller 41*f0df9794SNeil Fuller// Make sure all expected zone overlaps have a description 42*f0df9794SNeil FullerObject.keys(expectedZoneOverlaps).forEach(zoneOverlap => { 43*f0df9794SNeil Fuller expectedZoneOverlaps[zoneOverlap].forEach((overlapBounds, idx) => { 44*f0df9794SNeil Fuller if (!overlapBounds.description || overlapBounds.description.length < 3) { 45*f0df9794SNeil Fuller numErrors++ 46*f0df9794SNeil Fuller console.error(`Expected overlap #${idx} of zones ${zoneOverlap} missing description`) 47*f0df9794SNeil Fuller } 48*f0df9794SNeil Fuller }) 49*f0df9794SNeil Fuller}) 50*f0df9794SNeil Fuller 51*f0df9794SNeil Fullerif (numErrors > 0) { 52*f0df9794SNeil Fuller console.error(`${numErrors} errors found`) 53*f0df9794SNeil Fuller process.exit(1) 54*f0df9794SNeil Fuller} else { 55*f0df9794SNeil Fuller console.log('No linting errors!') 56*f0df9794SNeil Fuller} 57