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.
61 lines
1.4 KiB
61 lines
1.4 KiB
7 years ago
|
'use strict'
|
||
|
const typeOf = arg =>
|
||
|
typeof arg === 'object' ? (arg ? 'object' : 'null')
|
||
|
: typeof arg
|
||
|
|
||
|
module.exports = (name_, extra_, cb_, defaultName) => {
|
||
|
let name
|
||
|
let extra
|
||
|
let cb
|
||
|
|
||
|
const args = [name_, extra_, cb_]
|
||
|
|
||
|
// this only works if it's literally the 4th argument.
|
||
|
// used internally.
|
||
|
defaultName = defaultName || ''
|
||
|
|
||
|
for (let i = 0; i < 3 && i < args.length; i++) {
|
||
|
const arg = args[i]
|
||
|
const type = typeOf(arg)
|
||
|
if (name === undefined && (type === 'string' || type === 'number'))
|
||
|
name = '' + arg
|
||
|
else if (type === 'object') {
|
||
|
extra = arg
|
||
|
if (name === undefined)
|
||
|
name = null
|
||
|
} else if (type === 'function') {
|
||
|
if (extra === undefined)
|
||
|
extra = {}
|
||
|
if (name === undefined)
|
||
|
name = null
|
||
|
cb = arg
|
||
|
} else if (arg === false) {
|
||
|
// it's handy while developing to put a ! in front of a
|
||
|
// function to temporarily make a test todo
|
||
|
continue
|
||
|
} else if (type !== 'undefined')
|
||
|
throw new TypeError('unknown argument passed to parseTestArgs: ' + type)
|
||
|
}
|
||
|
|
||
|
if (!extra)
|
||
|
extra = {}
|
||
|
|
||
|
if (!cb && defaultName !== '/dev/stdin')
|
||
|
extra.todo = true
|
||
|
|
||
|
if (!name && extra.name)
|
||
|
name = extra.name
|
||
|
|
||
|
if (!name && cb && cb.name)
|
||
|
name = cb.name
|
||
|
|
||
|
name = name || defaultName
|
||
|
extra.name = name
|
||
|
extra.cb = cb || todoCb
|
||
|
return extra
|
||
|
}
|
||
|
|
||
|
const todoCb = () => {
|
||
|
throw new Error('callback called for TODO test')
|
||
|
}
|