| const osmBoundarySources = require('./osmBoundarySources.json') |
| const zoneCfg = require('./timezones.json') |
| const expectedZoneOverlaps = require('./expectedZoneOverlaps.json') |
| |
| let numErrors = 0 |
| |
| const sourcesUsage = {} |
| Object.keys(osmBoundarySources).forEach(source => { |
| sourcesUsage[source] = false |
| }) |
| |
| Object.keys(zoneCfg).forEach(zone => { |
| zoneCfg[zone].forEach((operation, idx) => { |
| if (operation.source === 'overpass') { |
| // check if source is defined |
| if (!osmBoundarySources[operation.id]) { |
| numErrors++ |
| |
| console.error(`No osmBoundarySources config found for entry: ${operation.id}`) |
| } else { |
| sourcesUsage[operation.id] = true |
| } |
| } else if (operation.source.indexOf('manual') > -1 && |
| (!operation.description || |
| operation.description.length < 3)) { |
| numErrors++ |
| |
| console.error(`No description of ${operation.source} for operation ${idx} of zone: ${zone}`) |
| } |
| }) |
| }) |
| |
| // check for sources not used in timezone building |
| Object.keys(sourcesUsage).forEach(source => { |
| if (!sourcesUsage[source]) { |
| numErrors++ |
| console.error(`osmBoundarySources config "${source}" is never used in timezone boundary building`) |
| } |
| }) |
| |
| // Make sure all expected zone overlaps have a description |
| Object.keys(expectedZoneOverlaps).forEach(zoneOverlap => { |
| expectedZoneOverlaps[zoneOverlap].forEach((overlapBounds, idx) => { |
| if (!overlapBounds.description || overlapBounds.description.length < 3) { |
| numErrors++ |
| console.error(`Expected overlap #${idx} of zones ${zoneOverlap} missing description`) |
| } |
| }) |
| }) |
| |
| if (numErrors > 0) { |
| console.error(`${numErrors} errors found`) |
| process.exit(1) |
| } else { |
| console.log('No linting errors!') |
| } |