all files / ogr2ogr/lib/ util.js

96.43% Statements 54/56
85.71% Branches 12/14
100% Functions 16/16
100% Lines 46/46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94     16×       24×       24× 217×                         187× 187× 195× 187× 187×                                             43× 43× 43×   43×   43× 27× 27× 27× 27×        
var path = require('path')
var tmpdir = require('os').tmpdir()
Iif (tmpdir === '/src') tmpdir = '/tmp' // docker issue
 
var fs = require('fs')
var rimraf = require('rimraf')
var drivers = require('./drivers.json')
 
exports.tmpl = function(tmpl, data) {
  for (var label in data) {
    tmpl = tmpl.replace('{{' + label + '}}', data[label])
  }
  return tmpl
}
 
var genInc = Date.now()
var genTmpPath = exports.genTmpPath = function() {
  return path.join(tmpdir, 'ogr_' + (genInc++).toString(14))
}
 
exports.rmParentDir = function(fpath, cb) { rimraf(path.dirname(fpath), cb) }
exports.rmDir = function(dpath, cb) { rimraf(dpath, cb) }
exports.rmFile = function(fpath, cb) { fs.unlink(fpath, cb) }
 
exports.getDriver = function(fmt) {
  for (var i = 0; i < drivers.length; i++) {
    if (drivers[i].format == fmt || drivers[i].aliases.indexOf(fmt) > -1) return drivers[i]
  }
  return {}
}
 
exports.writeStream = function(ins, ext, cb) {
  var fpath = genTmpPath() + '.' + ext
  var ws = fs.createWriteStream(fpath)
  var one = exports.oneCallback(cb)
 
  ins.pipe(ws)
    .on('error', one)
    .on('finish', function() {
      one(null, fpath)
    })
}
 
exports.writeGeoJSON = function(obj, cb) {
  var fpath = genTmpPath() + '.json'
  fs.writeFile(fpath, JSON.stringify(obj), function(er) {
    cb(er, fpath)
  })
}
 
exports.oneCallback = function(cb) {
  var called = false
  return function(er, data) {
    if (called) return
    called = true
    cb(er, data)
  }
}
 
// exports.chainCallback = function (/* args, cb */) {
//   var initArgs = Array.prototype.slice.call(arguments)
//   var cb = initArgs.pop()
//   initArgs.unshift(null)
//
//   return function () {
//     var fns = Array.prototype.slice.call(arguments)
//
//     function run (er, data) {
//       var fn = fns.shift()
//       if (!op || er) cb(er, data)
//       fn.call(null, er, data)
//     }
//
//     initArgs.push(run)
//     fns.shift().apply(null, initArgs)
//   }
// }
 
exports.allCallback = function(cb) {
  var one = exports.oneCallback(cb)
  var expect = 0
  var total = 0
 
  setImmediate(function() { if (expect == 0) one(null, total) })
 
  return function() {
    expect++, total++
    return function(er) {
      Iif (er) return one(er)
      if (--expect == 0) one(null, total)
    }
  }
}