UNPKG

wr

Version:

watch files and run a command when they change

185 lines (134 loc) 4.97 kB
#------------------------------------------------------------------------------- # Copyright (c) 2012 Patrick Mueller # # Licensed 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' optimist = require 'optimist' wr = require './wr' existsSync = fs.existsSync || path.existsSync #------------------------------------------------------------------------------- exports.run = -> args = process.argv.slice(2) if args.length == 0 if existsSync('.wr') stats = fs.statSync('.wr') if stats.isFile() args = getDotWrContents(".wr") optimist = optimist(args) argv = optimist .usage('Usage: $0 [options] command [file ...]') .alias( 'v', 'verbose') .boolean( 'verbose') .describe('verbose', 'generate verbose diagnostics') .alias( 'c', 'chime') .default( 'chime', 5) .describe('chime', 'generate a diagnostic every so many minutes') .boolean( 'exec') .describe('exec', 'run command with exec instead of spawn') .alias( 'p', 'poll') .describe('poll', 'use poll-based file watching') .boolean( 'V') .describe('V', 'print the version') .boolean( '?') .describe('?', 'print help') .boolean( 'h') .describe('h', 'print help') .argv #---- if argv.chime if typeof argv.chime != 'number' console.error "the chime option value is not a number" process.exit 1 if argv.poll if typeof argv.poll != 'number' console.error "the poll option value is not a number" process.exit 1 printHelp() if argv["?"] or argv.h if argv.V console.log(getVersion()) process.exit 0 args = argv._ printHelp() if args.length == 0 cmd = args[0] printHelp() if cmd == '?' if args.length == 1 files = ["."] else files = args.slice(1) #---- opts = {} opts.verbose = argv.verbose opts.chime = argv.chime opts.exec = argv.exec opts.poll = argv.poll opts.logError = logError opts.logSuccess = logSuccess opts.logInfo = logInfo ### console.log """ cmd: #{cmd} files: #{JSON.stringify(files)} opts: #{JSON.stringify(opts)} argv: #{JSON.stringify(argv,null,4)} """ ### wr.run cmd, files, opts #------------------------------------------------------------------------------- printHelp = () -> optimist.showHelp() console.error "for more info see: https://github.com/pmuellr/wr" process.exit 1 #------------------------------------------------------------------------------- getDotWrContents = () -> contents = fs.readFileSync('.wr', 'utf8') lines = contents.split('\n') args = [] for line in lines line = line.replace(/#.*/,'') line = line.replace(/(^\s+)|(\s+$)/g,'') continue if line == '' if line[0] == '-' pattern = /(\S*)(\s*(.*))/ groups = line.match(pattern) if groups[3] != '' args.push groups[1] args.push groups[3] continue args.push line args #------------------------------------------------------------------------------- getVersion = () -> packageJsonName = path.join(path.dirname(fs.realpathSync(__filename)), '../package.json') json = fs.readFileSync(packageJsonName, 'utf8') values = JSON.parse(json) return values.version #--------------------------------------------------------------------------- logError = (message) -> date = new Date() time = date.toLocaleTimeString() message = "#{time} wr: #{message}".red.inverse.white console.log message #--------------------------------------------------------------------------- logSuccess = (message) -> date = new Date() time = date.toLocaleTimeString() message = "#{time} wr: #{message}".green.inverse.white console.log message #--------------------------------------------------------------------------- logInfo = (message) -> date = new Date() time = date.toLocaleTimeString() message = "#{time} wr: #{message}".blue.inverse.white console.log message