args-to-options.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. module.exports = parse
  2. var minimist = require('minimist')
  3. , path = require('path')
  4. var normalizeEntryPoints = require('./normalize-entry-points.js')
  5. , setupBundler = require('./setup-bundlers.js')
  6. , extractPort = require('./extract-port.js')
  7. function parse(argv, cwd, ready) {
  8. var idx = argv.length
  9. , nestLevel = 0
  10. for(var i = 0, len = argv.length; i < len; ++i) {
  11. if(argv[i] === '[') {
  12. ++nestLevel
  13. } else if(argv[i] === ']') {
  14. --nestLevel
  15. }
  16. if(argv[i] === '--' && !nestLevel) {
  17. idx = i
  18. break
  19. }
  20. }
  21. var parsed = minimist(argv.slice(0, idx))
  22. , bundlerFlags = argv.slice(idx + 1)
  23. , legacyBundlerMode = false
  24. , entryPoints
  25. // open options
  26. parsed.open = parsed.o || parsed.open
  27. parsed.url = parsed.u || parsed.url || parsed.open
  28. parsed.help = parsed.h || parsed.help
  29. parsed.port = parsed.p || parsed.port
  30. // handler options
  31. parsed.cwd = parsed.cwd || cwd
  32. parsed.live = parsed.l || parsed.live
  33. parsed.debug = parsed.d || parsed.debug
  34. parsed.bundler = parsed.browserify || parsed.bundler
  35. parsed.watchify = parsed.watchify === undefined ? true : parsed.watchify
  36. parsed.index = parsed.i || parsed.index
  37. if(!parsed.bundler && parsed.debug !== 'false') {
  38. if(bundlerFlags.indexOf('-d') === -1) {
  39. bundlerFlags.unshift('-d')
  40. }
  41. }
  42. extractPort(parsed, ongotport)
  43. function ongotport(err, port, remain) {
  44. entryPoints = normalizeEntryPoints(remain)
  45. parsed.port = port
  46. if(parsed.bundler) {
  47. legacyBundlerMode = true
  48. return onbundler(null, parsed.bundler)
  49. }
  50. setupBundler(
  51. cwd
  52. , entryPoints
  53. , bundlerFlags
  54. , !parsed.watchify
  55. , onbundler
  56. )
  57. }
  58. function onbundler(err, bundler) {
  59. if(err) {
  60. return ready(err)
  61. }
  62. parsed.bundler = bundler
  63. return buildOutput()
  64. }
  65. function buildOutput() {
  66. var openOptions = {
  67. openURL: (typeof parsed.url === 'string' && parsed.url) ||
  68. ('http://127.0.0.1:' + parsed.port)
  69. , openBrowser: !!(parsed.open || parsed.url)
  70. , showHelp: !!parsed.help
  71. , port: parsed.port
  72. }
  73. var hasColor = {
  74. color: parsed.color === undefined || parsed.color
  75. }
  76. var handlerOptions = {
  77. live: parsed.live ? {rate: 2000} : false
  78. , generatedIndex: parsed.index
  79. , entries: entryPoints
  80. , log: hasColor
  81. , cwd: parsed.cwd
  82. , realCwd: cwd
  83. }
  84. handlerOptions.bundler = {
  85. command: parsed.bundler
  86. , flags: bundlerFlags
  87. , legacy: legacyBundlerMode
  88. }
  89. ready(null, {
  90. handler: handlerOptions
  91. , open: openOptions
  92. })
  93. }
  94. }