Bones/node_modules/weinre/lib-src/cli.coffee

131 lines
4.1 KiB
CoffeeScript
Raw Normal View History

2017-05-17 13:45:25 -04:00
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
fs = require 'fs'
path = require 'path'
_ = require 'underscore'
nopt = require 'nopt'
utils = require './utils'
weinre = require './weinre'
optionDefaults =
httpPort: 8080
boundHost: 'localhost'
verbose: false
debug: false
readTimeout: 5
#-------------------------------------------------------------------------------
exports.run = ->
knownOpts =
httpPort: Number
boundHost: String
verbose: Boolean
debug: Boolean
readTimeout: Number
deathTimeout: Number
help: Boolean
shortHands =
'?': ['--help']
'h': ['--help']
nopt.invalidHandler = printNoptError
parsedOpts = nopt(knownOpts, shortHands, process.argv, 2)
#----
printHelp() if parsedOpts.help
args = parsedOpts.argv.remain
printHelp() if args.length != 0
#----
delete parsedOpts.argv
opts = _.extend {}, optionDefaults, getDotWeinreServerProperties(), parsedOpts
if !opts.deathTimeout?
opts.deathTimeout = 3 * opts.readTimeout
utils.setOptions opts
weinre.run opts
#-------------------------------------------------------------------------------
printNoptError = (key, val, types) ->
utils.exit "error with option '#{key}', value '#{val}'"
#-------------------------------------------------------------------------------
printHelp = () ->
version = weinre.getVersion()
console.error """
usage: #{utils.Program} [options]
version: #{version}
options:
--httpPort port to run the http server on default: #{optionDefaults.httpPort}
--boundHost ip address to bind the server to default: #{optionDefaults.boundHost}
--verbose print more diagnostics default: #{optionDefaults.verbose}
--debug print even more diagnostics default: #{optionDefaults.debug}
--readTimeout seconds to wait for a client message default: #{optionDefaults.readTimeout}
--deathTimeout seconds to wait to kill client default: 3*readTimeout
--boundHost can be an ip address, hostname, or -all-, where -all-
means binding to all ip address on the current machine'
for more info see: http://people.apache.org/~pmuellr/weinre/
"""
process.exit()
#-------------------------------------------------------------------------------
getDotWeinreServerProperties = () ->
properties = {}
fileName = replaceTilde '~/.weinre/server.properties'
return properties if !utils.fileExistsSync(fileName)
contents = fs.readFileSync(fileName, 'utf8')
lines = contents.split('\n')
for line in lines
line = line.replace(/#.*/,'')
match = line.match /\s*(\w+)\s*:\s*(.+)\s*/
continue if !match
key = utils.trim match[1]
val = utils.trim match[2]
properties[key] = val
properties
#-------------------------------------------------------------------------------
replaceTilde = (fileName) ->
fileName.replace('~', getTildeReplacement())
#-------------------------------------------------------------------------------
getTildeReplacement = () ->
process.env["HOME"] || process.env["USERPROFILE"] || '.'