Sun calculation js library which is fully based on formula from http://aa.quae.nl/en/reken/zonpositie.html
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.5 KiB
107 lines
2.5 KiB
7 years ago
|
#!/usr/bin/env node
|
||
|
|
||
|
module.exports = Formatter
|
||
|
|
||
|
var util = require('util')
|
||
|
var reporters = require('./lib/reporters/index.js')
|
||
|
Formatter.types = Object.keys(reporters).sort()
|
||
|
var Writable = require('stream').Writable
|
||
|
if (!Writable) {
|
||
|
try {
|
||
|
Writable = require('readable-stream').Writable
|
||
|
} catch (er) {
|
||
|
throw new Error('Please install "readable-stream" to use this module ' +
|
||
|
'with Node.js v0.8 and before')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var Runner = require('./lib/runner.js')
|
||
|
var Parser = require('tap-parser')
|
||
|
|
||
|
util.inherits(Formatter, Writable)
|
||
|
|
||
|
var exitCode
|
||
|
function Formatter (type, options) {
|
||
|
if (!(this instanceof Formatter)) {
|
||
|
return new Formatter(type, options)
|
||
|
}
|
||
|
if (!reporters[type]) {
|
||
|
console.error('Unknown format type: %s\n\n%s', type, avail())
|
||
|
type = 'silent'
|
||
|
}
|
||
|
|
||
|
this.writable = true
|
||
|
|
||
|
// don't actually need a reporter to report the tap we're getting
|
||
|
// just parse it so that we exit with the correct code, but otherwise
|
||
|
// dump it straight through to stdout.
|
||
|
if (type === 'tap') {
|
||
|
var p = new Parser()
|
||
|
this.write = function (chunk) {
|
||
|
process.stdout.write(chunk)
|
||
|
return p.write(chunk)
|
||
|
}
|
||
|
this.end = p.end.bind(p)
|
||
|
p.on('complete', function () {
|
||
|
if (!p.ok)
|
||
|
exitCode = 1
|
||
|
})
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
var runner = this.runner = new Runner(options)
|
||
|
this.reporter = new reporters[type](this.runner, {})
|
||
|
Writable.call(this, options)
|
||
|
|
||
|
runner.on('end', function () {
|
||
|
if (!runner.parser.ok)
|
||
|
exitCode = 1
|
||
|
})
|
||
|
}
|
||
|
|
||
|
process.on('exit', function (code) {
|
||
|
if (!code && exitCode)
|
||
|
process.exit(exitCode)
|
||
|
})
|
||
|
|
||
|
Formatter.prototype.write = function () {
|
||
|
return this.runner.write.apply(this.runner, arguments)
|
||
|
}
|
||
|
|
||
|
Formatter.prototype.end = function () {
|
||
|
return this.runner.end.apply(this.runner, arguments)
|
||
|
}
|
||
|
|
||
|
function avail () {
|
||
|
var types = Formatter.types.reduce(function (str, t) {
|
||
|
var ll = str.split('\n').pop().length + t.length
|
||
|
if (ll < 40)
|
||
|
return str + ' ' + t
|
||
|
else
|
||
|
return str + '\n' + t
|
||
|
}, '').trim()
|
||
|
|
||
|
return 'Available format types:\n\n' + types
|
||
|
}
|
||
|
|
||
|
|
||
|
function usage (err) {
|
||
|
console[err ? 'error' : 'log'](function () {/*
|
||
|
Usage:
|
||
|
tap-mocha-reporter <type>
|
||
|
|
||
|
Reads TAP data on stdin, and formats to stdout using the specified
|
||
|
reporter. (Note that some reporters write to files instead of stdout.)
|
||
|
|
||
|
%s
|
||
|
*/}.toString().split('\n').slice(1, -1).join('\n'), avail())
|
||
|
}
|
||
|
|
||
|
if (require.main === module) {
|
||
|
var type = process.argv[2]
|
||
|
if (!type)
|
||
|
return usage()
|
||
|
|
||
|
process.stdin.pipe(new Formatter(type))
|
||
|
}
|