traceur-rb 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. checksums.yaml +8 -8
  2. data/lib/traceur/configuration.rb +1 -1
  3. data/lib/traceur/version.rb +1 -1
  4. data/{vendor/node_modules → node_modules}/.bin/traceur +0 -0
  5. data/{vendor/node_modules → node_modules}/traceur/LICENSE +0 -0
  6. data/{vendor/node_modules → node_modules}/traceur/README.md +0 -0
  7. data/node_modules/traceur/bin/traceur-runtime.js +3420 -0
  8. data/node_modules/traceur/bin/traceur.js +30354 -0
  9. data/{vendor/node_modules → node_modules}/traceur/node_modules/.bin/semver +0 -0
  10. data/node_modules/traceur/node_modules/commander/History.md +256 -0
  11. data/node_modules/traceur/node_modules/commander/LICENSE +22 -0
  12. data/node_modules/traceur/node_modules/commander/Readme.md +342 -0
  13. data/node_modules/traceur/node_modules/commander/index.js +1103 -0
  14. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/.npmignore +3 -0
  15. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/.travis.yml +5 -0
  16. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/LICENSE +22 -0
  17. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/README.md +17 -0
  18. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/index.js +12 -0
  19. data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/package.json +48 -0
  20. data/node_modules/traceur/node_modules/commander/package.json +75 -0
  21. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/LICENSE +0 -0
  22. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/README.md +0 -0
  23. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/common.js +0 -0
  24. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/glob.js +0 -0
  25. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/.eslintrc +0 -0
  26. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/LICENSE +0 -0
  27. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/README.md +0 -0
  28. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/inflight.js +0 -0
  29. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +0 -0
  30. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +0 -0
  31. data/node_modules/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
  32. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +0 -0
  33. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +0 -0
  34. data/node_modules/traceur/node_modules/glob/node_modules/inflight/package.json +61 -0
  35. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/test.js +0 -0
  36. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/LICENSE +0 -0
  37. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/README.md +0 -0
  38. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/inherits.js +0 -0
  39. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/inherits_browser.js +0 -0
  40. data/node_modules/traceur/node_modules/glob/node_modules/inherits/package.json +50 -0
  41. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/test.js +0 -0
  42. data/{vendor/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy → node_modules/traceur/node_modules/glob/node_modules/minimatch}/LICENSE +0 -0
  43. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/README.md +0 -0
  44. data/node_modules/traceur/node_modules/glob/node_modules/minimatch/browser.js +1159 -0
  45. data/node_modules/traceur/node_modules/glob/node_modules/minimatch/minimatch.js +912 -0
  46. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +0 -0
  47. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +0 -0
  48. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +0 -0
  49. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +0 -0
  50. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +0 -0
  51. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +0 -0
  52. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +0 -0
  53. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +0 -0
  54. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +0 -0
  55. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +0 -0
  56. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +0 -0
  57. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +0 -0
  58. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +0 -0
  59. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +0 -0
  60. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +0 -0
  61. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +0 -0
  62. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +0 -0
  63. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +0 -0
  64. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +0 -0
  65. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +0 -0
  66. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +0 -0
  67. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +0 -0
  68. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +0 -0
  69. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +0 -0
  70. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +0 -0
  71. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +0 -0
  72. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +0 -0
  73. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +0 -0
  74. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +0 -0
  75. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +0 -0
  76. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +0 -0
  77. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +0 -0
  78. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +0 -0
  79. data/node_modules/traceur/node_modules/glob/node_modules/minimatch/package.json +63 -0
  80. data/node_modules/traceur/node_modules/glob/node_modules/once/LICENSE +15 -0
  81. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/README.md +0 -0
  82. data/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
  83. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +0 -0
  84. data/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
  85. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +0 -0
  86. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +0 -0
  87. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/once.js +0 -0
  88. data/node_modules/traceur/node_modules/glob/node_modules/once/package.json +60 -0
  89. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/test/once.js +0 -0
  90. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/package.json +0 -0
  91. data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/sync.js +0 -0
  92. data/node_modules/traceur/node_modules/rsvp/CHANGELOG.md +255 -0
  93. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/LICENSE +0 -0
  94. data/node_modules/traceur/node_modules/rsvp/README.md +366 -0
  95. data/node_modules/traceur/node_modules/rsvp/dist/rsvp.js +1597 -0
  96. data/node_modules/traceur/node_modules/rsvp/dist/rsvp.min.js +9 -0
  97. data/node_modules/traceur/node_modules/rsvp/lib/rsvp.js +70 -0
  98. data/node_modules/traceur/node_modules/rsvp/lib/rsvp.umd.js +51 -0
  99. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/-internal.js +0 -0
  100. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/all-settled.js +73 -0
  101. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/all.js +0 -0
  102. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/asap.js +112 -0
  103. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/config.js +0 -0
  104. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/defer.js +45 -0
  105. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/enumerator.js +130 -0
  106. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/events.js +205 -0
  107. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/filter.js +0 -0
  108. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/hash-settled.js +126 -0
  109. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/hash.js +94 -0
  110. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/instrument.js +41 -0
  111. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/map.js +0 -0
  112. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/node.js +281 -0
  113. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/platform.js +14 -0
  114. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise-hash.js +52 -0
  115. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise.js +496 -0
  116. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/promise/all.js +0 -0
  117. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/race.js +105 -0
  118. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/reject.js +47 -0
  119. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/resolve.js +49 -0
  120. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/race.js +0 -0
  121. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/reject.js +16 -0
  122. data/node_modules/traceur/node_modules/rsvp/lib/rsvp/resolve.js +17 -0
  123. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/rethrow.js +0 -0
  124. data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/utils.js +0 -0
  125. data/node_modules/traceur/node_modules/rsvp/package.json +106 -0
  126. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/.npmignore +0 -0
  127. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/LICENSE +0 -0
  128. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/Makefile +0 -0
  129. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/README.md +0 -0
  130. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/bin/semver +0 -0
  131. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/foot.js +0 -0
  132. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/head.js +0 -0
  133. data/node_modules/traceur/node_modules/semver/package.json +50 -0
  134. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.browser.js +0 -0
  135. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.browser.js.gz +0 -0
  136. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.js +0 -0
  137. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.min.js +0 -0
  138. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.min.js.gz +0 -0
  139. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/amd.js +0 -0
  140. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/gtr.js +0 -0
  141. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/index.js +0 -0
  142. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/ltr.js +0 -0
  143. data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/no-module.js +0 -0
  144. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/.npmignore +0 -0
  145. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/LICENSE.md +0 -0
  146. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/README.md +0 -0
  147. data/node_modules/traceur/node_modules/source-map-support/amd-test/browser-source-map-support.js +89 -0
  148. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/index.html +0 -0
  149. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/require.js +0 -0
  150. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.coffee +0 -0
  151. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.js +0 -0
  152. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.map +0 -0
  153. data/node_modules/traceur/node_modules/source-map-support/browser-source-map-support.js +89 -0
  154. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/index.html +0 -0
  155. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.coffee +0 -0
  156. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.js +0 -0
  157. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.map +0 -0
  158. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/build.js +0 -0
  159. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/index.html +0 -0
  160. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.coffee +0 -0
  161. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.js +0 -0
  162. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.map +0 -0
  163. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/server.js +0 -0
  164. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/.npmignore +0 -0
  165. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/.travis.yml +0 -0
  166. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/CHANGELOG.md +0 -0
  167. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/LICENSE +0 -0
  168. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/Makefile.dryice.js +0 -0
  169. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/README.md +0 -0
  170. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/assert-shim.js +0 -0
  171. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/mini-require.js +0 -0
  172. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/prefix-source-map.jsm +0 -0
  173. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/prefix-utils.jsm +0 -0
  174. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-browser.js +0 -0
  175. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-source-map.jsm +0 -0
  176. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-utils.jsm +0 -0
  177. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/test-prefix.js +0 -0
  178. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/test-suffix.js +0 -0
  179. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map.js +0 -0
  180. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/array-set.js +0 -0
  181. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/base64-vlq.js +0 -0
  182. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/base64.js +0 -0
  183. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/binary-search.js +0 -0
  184. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-map-consumer.js +0 -0
  185. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-map-generator.js +0 -0
  186. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-node.js +0 -0
  187. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/util.js +0 -0
  188. data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  189. data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/README.md +171 -0
  190. data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/amdefine.js +301 -0
  191. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/intercept.js +0 -0
  192. data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/package.json +47 -0
  193. data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/package.json +142 -0
  194. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/run-tests.js +0 -0
  195. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-api.js +0 -0
  196. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-array-set.js +0 -0
  197. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-base64-vlq.js +0 -0
  198. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-base64.js +0 -0
  199. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-binary-search.js +0 -0
  200. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-dog-fooding.js +0 -0
  201. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-map-consumer.js +0 -0
  202. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-map-generator.js +0 -0
  203. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-node.js +0 -0
  204. data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/util.js +0 -0
  205. data/node_modules/traceur/node_modules/source-map-support/package.json +52 -0
  206. data/node_modules/traceur/node_modules/source-map-support/source-map-support.js +386 -0
  207. data/node_modules/traceur/node_modules/source-map-support/test.js +384 -0
  208. data/node_modules/traceur/package.json +286 -0
  209. data/node_modules/traceur/src/node/NodeCompiler.js +81 -0
  210. data/{vendor/node_modules → node_modules}/traceur/src/node/System.js +0 -0
  211. data/{vendor/node_modules → node_modules}/traceur/src/node/api.js +0 -0
  212. data/node_modules/traceur/src/node/command.js +203 -0
  213. data/{vendor/node_modules → node_modules}/traceur/src/node/compileAllJsFilesInDir.js +0 -0
  214. data/{vendor/node_modules → node_modules}/traceur/src/node/deferred.js +0 -0
  215. data/{vendor/node_modules → node_modules}/traceur/src/node/file-util.js +0 -0
  216. data/{vendor/node_modules → node_modules}/traceur/src/node/getopt.js +0 -0
  217. data/node_modules/traceur/src/node/interpreter.js +37 -0
  218. data/{vendor/node_modules → node_modules}/traceur/src/node/nodeLoader.js +0 -0
  219. data/node_modules/traceur/src/node/recursiveModuleCompile.js +171 -0
  220. data/{vendor/node_modules → node_modules}/traceur/src/node/require.js +0 -0
  221. data/{vendor/node_modules → node_modules}/traceur/src/node/to-amd-compiler.js +0 -0
  222. data/{vendor/node_modules → node_modules}/traceur/src/node/to-closure-compiler.js +0 -0
  223. data/{vendor/node_modules → node_modules}/traceur/src/node/to-commonjs-compiler.js +0 -0
  224. data/{vendor/node_modules → node_modules}/traceur/src/node/traceur.js +0 -0
  225. data/{vendor/node_modules → node_modules}/traceur/traceur +0 -0
  226. data/package.json +15 -0
  227. data/spec/traceur/configuration_spec.rb +3 -3
  228. metadata +225 -161
@@ -0,0 +1,1103 @@
1
+
2
+ /**
3
+ * Module dependencies.
4
+ */
5
+
6
+ var EventEmitter = require('events').EventEmitter;
7
+ var spawn = require('child_process').spawn;
8
+ var readlink = require('graceful-readlink').readlinkSync;
9
+ var path = require('path');
10
+ var dirname = path.dirname;
11
+ var basename = path.basename;
12
+ var fs = require('fs');
13
+
14
+ /**
15
+ * Expose the root command.
16
+ */
17
+
18
+ exports = module.exports = new Command();
19
+
20
+ /**
21
+ * Expose `Command`.
22
+ */
23
+
24
+ exports.Command = Command;
25
+
26
+ /**
27
+ * Expose `Option`.
28
+ */
29
+
30
+ exports.Option = Option;
31
+
32
+ /**
33
+ * Initialize a new `Option` with the given `flags` and `description`.
34
+ *
35
+ * @param {String} flags
36
+ * @param {String} description
37
+ * @api public
38
+ */
39
+
40
+ function Option(flags, description) {
41
+ this.flags = flags;
42
+ this.required = ~flags.indexOf('<');
43
+ this.optional = ~flags.indexOf('[');
44
+ this.bool = !~flags.indexOf('-no-');
45
+ flags = flags.split(/[ ,|]+/);
46
+ if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
47
+ this.long = flags.shift();
48
+ this.description = description || '';
49
+ }
50
+
51
+ /**
52
+ * Return option name.
53
+ *
54
+ * @return {String}
55
+ * @api private
56
+ */
57
+
58
+ Option.prototype.name = function() {
59
+ return this.long
60
+ .replace('--', '')
61
+ .replace('no-', '');
62
+ };
63
+
64
+ /**
65
+ * Check if `arg` matches the short or long flag.
66
+ *
67
+ * @param {String} arg
68
+ * @return {Boolean}
69
+ * @api private
70
+ */
71
+
72
+ Option.prototype.is = function(arg) {
73
+ return arg == this.short || arg == this.long;
74
+ };
75
+
76
+ /**
77
+ * Initialize a new `Command`.
78
+ *
79
+ * @param {String} name
80
+ * @api public
81
+ */
82
+
83
+ function Command(name) {
84
+ this.commands = [];
85
+ this.options = [];
86
+ this._execs = [];
87
+ this._allowUnknownOption = false;
88
+ this._args = [];
89
+ this._name = name;
90
+ }
91
+
92
+ /**
93
+ * Inherit from `EventEmitter.prototype`.
94
+ */
95
+
96
+ Command.prototype.__proto__ = EventEmitter.prototype;
97
+
98
+ /**
99
+ * Add command `name`.
100
+ *
101
+ * The `.action()` callback is invoked when the
102
+ * command `name` is specified via __ARGV__,
103
+ * and the remaining arguments are applied to the
104
+ * function for access.
105
+ *
106
+ * When the `name` is "*" an un-matched command
107
+ * will be passed as the first arg, followed by
108
+ * the rest of __ARGV__ remaining.
109
+ *
110
+ * Examples:
111
+ *
112
+ * program
113
+ * .version('0.0.1')
114
+ * .option('-C, --chdir <path>', 'change the working directory')
115
+ * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
116
+ * .option('-T, --no-tests', 'ignore test hook')
117
+ *
118
+ * program
119
+ * .command('setup')
120
+ * .description('run remote setup commands')
121
+ * .action(function() {
122
+ * console.log('setup');
123
+ * });
124
+ *
125
+ * program
126
+ * .command('exec <cmd>')
127
+ * .description('run the given remote command')
128
+ * .action(function(cmd) {
129
+ * console.log('exec "%s"', cmd);
130
+ * });
131
+ *
132
+ * program
133
+ * .command('teardown <dir> [otherDirs...]')
134
+ * .description('run teardown commands')
135
+ * .action(function(dir, otherDirs) {
136
+ * console.log('dir "%s"', dir);
137
+ * if (otherDirs) {
138
+ * otherDirs.forEach(function (oDir) {
139
+ * console.log('dir "%s"', oDir);
140
+ * });
141
+ * }
142
+ * });
143
+ *
144
+ * program
145
+ * .command('*')
146
+ * .description('deploy the given env')
147
+ * .action(function(env) {
148
+ * console.log('deploying "%s"', env);
149
+ * });
150
+ *
151
+ * program.parse(process.argv);
152
+ *
153
+ * @param {String} name
154
+ * @param {String} [desc] for git-style sub-commands
155
+ * @return {Command} the new command
156
+ * @api public
157
+ */
158
+
159
+ Command.prototype.command = function(name, desc, opts) {
160
+ opts = opts || {};
161
+ var args = name.split(/ +/);
162
+ var cmd = new Command(args.shift());
163
+
164
+ if (desc) {
165
+ cmd.description(desc);
166
+ this.executables = true;
167
+ this._execs[cmd._name] = true;
168
+ }
169
+
170
+ cmd._noHelp = !!opts.noHelp;
171
+ this.commands.push(cmd);
172
+ cmd.parseExpectedArgs(args);
173
+ cmd.parent = this;
174
+
175
+ if (desc) return this;
176
+ return cmd;
177
+ };
178
+
179
+ /**
180
+ * Define argument syntax for the top-level command.
181
+ *
182
+ * @api public
183
+ */
184
+
185
+ Command.prototype.arguments = function (desc) {
186
+ return this.parseExpectedArgs(desc.split(/ +/));
187
+ }
188
+
189
+ /**
190
+ * Add an implicit `help [cmd]` subcommand
191
+ * which invokes `--help` for the given command.
192
+ *
193
+ * @api private
194
+ */
195
+
196
+ Command.prototype.addImplicitHelpCommand = function() {
197
+ this.command('help [cmd]', 'display help for [cmd]');
198
+ };
199
+
200
+ /**
201
+ * Parse expected `args`.
202
+ *
203
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
204
+ *
205
+ * @param {Array} args
206
+ * @return {Command} for chaining
207
+ * @api public
208
+ */
209
+
210
+ Command.prototype.parseExpectedArgs = function(args) {
211
+ if (!args.length) return;
212
+ var self = this;
213
+ args.forEach(function(arg) {
214
+ var argDetails = {
215
+ required: false,
216
+ name: '',
217
+ variadic: false
218
+ };
219
+
220
+ switch (arg[0]) {
221
+ case '<':
222
+ argDetails.required = true;
223
+ argDetails.name = arg.slice(1, -1);
224
+ break;
225
+ case '[':
226
+ argDetails.name = arg.slice(1, -1);
227
+ break;
228
+ }
229
+
230
+ if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
231
+ argDetails.variadic = true;
232
+ argDetails.name = argDetails.name.slice(0, -3);
233
+ }
234
+ if (argDetails.name) {
235
+ self._args.push(argDetails);
236
+ }
237
+ });
238
+ return this;
239
+ };
240
+
241
+ /**
242
+ * Register callback `fn` for the command.
243
+ *
244
+ * Examples:
245
+ *
246
+ * program
247
+ * .command('help')
248
+ * .description('display verbose help')
249
+ * .action(function() {
250
+ * // output help here
251
+ * });
252
+ *
253
+ * @param {Function} fn
254
+ * @return {Command} for chaining
255
+ * @api public
256
+ */
257
+
258
+ Command.prototype.action = function(fn) {
259
+ var self = this;
260
+ var listener = function(args, unknown) {
261
+ // Parse any so-far unknown options
262
+ args = args || [];
263
+ unknown = unknown || [];
264
+
265
+ var parsed = self.parseOptions(unknown);
266
+
267
+ // Output help if necessary
268
+ outputHelpIfNecessary(self, parsed.unknown);
269
+
270
+ // If there are still any unknown options, then we simply
271
+ // die, unless someone asked for help, in which case we give it
272
+ // to them, and then we die.
273
+ if (parsed.unknown.length > 0) {
274
+ self.unknownOption(parsed.unknown[0]);
275
+ }
276
+
277
+ // Leftover arguments need to be pushed back. Fixes issue #56
278
+ if (parsed.args.length) args = parsed.args.concat(args);
279
+
280
+ self._args.forEach(function(arg, i) {
281
+ if (arg.required && null == args[i]) {
282
+ self.missingArgument(arg.name);
283
+ } else if (arg.variadic) {
284
+ if (i !== self._args.length - 1) {
285
+ self.variadicArgNotLast(arg.name);
286
+ }
287
+
288
+ args[i] = args.splice(i);
289
+ }
290
+ });
291
+
292
+ // Always append ourselves to the end of the arguments,
293
+ // to make sure we match the number of arguments the user
294
+ // expects
295
+ if (self._args.length) {
296
+ args[self._args.length] = self;
297
+ } else {
298
+ args.push(self);
299
+ }
300
+
301
+ fn.apply(self, args);
302
+ };
303
+ var parent = this.parent || this;
304
+ var name = parent === this ? '*' : this._name;
305
+ parent.on(name, listener);
306
+ if (this._alias) parent.on(this._alias, listener);
307
+ return this;
308
+ };
309
+
310
+ /**
311
+ * Define option with `flags`, `description` and optional
312
+ * coercion `fn`.
313
+ *
314
+ * The `flags` string should contain both the short and long flags,
315
+ * separated by comma, a pipe or space. The following are all valid
316
+ * all will output this way when `--help` is used.
317
+ *
318
+ * "-p, --pepper"
319
+ * "-p|--pepper"
320
+ * "-p --pepper"
321
+ *
322
+ * Examples:
323
+ *
324
+ * // simple boolean defaulting to false
325
+ * program.option('-p, --pepper', 'add pepper');
326
+ *
327
+ * --pepper
328
+ * program.pepper
329
+ * // => Boolean
330
+ *
331
+ * // simple boolean defaulting to true
332
+ * program.option('-C, --no-cheese', 'remove cheese');
333
+ *
334
+ * program.cheese
335
+ * // => true
336
+ *
337
+ * --no-cheese
338
+ * program.cheese
339
+ * // => false
340
+ *
341
+ * // required argument
342
+ * program.option('-C, --chdir <path>', 'change the working directory');
343
+ *
344
+ * --chdir /tmp
345
+ * program.chdir
346
+ * // => "/tmp"
347
+ *
348
+ * // optional argument
349
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
350
+ *
351
+ * @param {String} flags
352
+ * @param {String} description
353
+ * @param {Function|Mixed} fn or default
354
+ * @param {Mixed} defaultValue
355
+ * @return {Command} for chaining
356
+ * @api public
357
+ */
358
+
359
+ Command.prototype.option = function(flags, description, fn, defaultValue) {
360
+ var self = this
361
+ , option = new Option(flags, description)
362
+ , oname = option.name()
363
+ , name = camelcase(oname);
364
+
365
+ // default as 3rd arg
366
+ if (typeof fn != 'function') {
367
+ if (fn instanceof RegExp) {
368
+ var regex = fn;
369
+ fn = function(val, def) {
370
+ var m = regex.exec(val);
371
+ return m ? m[0] : def;
372
+ }
373
+ }
374
+ else {
375
+ defaultValue = fn;
376
+ fn = null;
377
+ }
378
+ }
379
+
380
+ // preassign default value only for --no-*, [optional], or <required>
381
+ if (false == option.bool || option.optional || option.required) {
382
+ // when --no-* we make sure default is true
383
+ if (false == option.bool) defaultValue = true;
384
+ // preassign only if we have a default
385
+ if (undefined !== defaultValue) self[name] = defaultValue;
386
+ }
387
+
388
+ // register the option
389
+ this.options.push(option);
390
+
391
+ // when it's passed assign the value
392
+ // and conditionally invoke the callback
393
+ this.on(oname, function(val) {
394
+ // coercion
395
+ if (null !== val && fn) val = fn(val, undefined === self[name]
396
+ ? defaultValue
397
+ : self[name]);
398
+
399
+ // unassigned or bool
400
+ if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) {
401
+ // if no value, bool true, and we have a default, then use it!
402
+ if (null == val) {
403
+ self[name] = option.bool
404
+ ? defaultValue || true
405
+ : false;
406
+ } else {
407
+ self[name] = val;
408
+ }
409
+ } else if (null !== val) {
410
+ // reassign
411
+ self[name] = val;
412
+ }
413
+ });
414
+
415
+ return this;
416
+ };
417
+
418
+ /**
419
+ * Allow unknown options on the command line.
420
+ *
421
+ * @param {Boolean} arg if `true` or omitted, no error will be thrown
422
+ * for unknown options.
423
+ * @api public
424
+ */
425
+ Command.prototype.allowUnknownOption = function(arg) {
426
+ this._allowUnknownOption = arguments.length === 0 || arg;
427
+ return this;
428
+ };
429
+
430
+ /**
431
+ * Parse `argv`, settings options and invoking commands when defined.
432
+ *
433
+ * @param {Array} argv
434
+ * @return {Command} for chaining
435
+ * @api public
436
+ */
437
+
438
+ Command.prototype.parse = function(argv) {
439
+ // implicit help
440
+ if (this.executables) this.addImplicitHelpCommand();
441
+
442
+ // store raw args
443
+ this.rawArgs = argv;
444
+
445
+ // guess name
446
+ this._name = this._name || basename(argv[1], '.js');
447
+
448
+ // github-style sub-commands with no sub-command
449
+ if (this.executables && argv.length < 3) {
450
+ // this user needs help
451
+ argv.push('--help');
452
+ }
453
+
454
+ // process argv
455
+ var parsed = this.parseOptions(this.normalize(argv.slice(2)));
456
+ var args = this.args = parsed.args;
457
+
458
+ var result = this.parseArgs(this.args, parsed.unknown);
459
+
460
+ // executable sub-commands
461
+ var name = result.args[0];
462
+ if (this._execs[name] && typeof this._execs[name] != "function") {
463
+ return this.executeSubCommand(argv, args, parsed.unknown);
464
+ }
465
+
466
+ return result;
467
+ };
468
+
469
+ /**
470
+ * Execute a sub-command executable.
471
+ *
472
+ * @param {Array} argv
473
+ * @param {Array} args
474
+ * @param {Array} unknown
475
+ * @api private
476
+ */
477
+
478
+ Command.prototype.executeSubCommand = function(argv, args, unknown) {
479
+ args = args.concat(unknown);
480
+
481
+ if (!args.length) this.help();
482
+ if ('help' == args[0] && 1 == args.length) this.help();
483
+
484
+ // <cmd> --help
485
+ if ('help' == args[0]) {
486
+ args[0] = args[1];
487
+ args[1] = '--help';
488
+ }
489
+
490
+ // executable
491
+ var f = argv[1];
492
+ // name of the subcommand, link `pm-install`
493
+ var bin = basename(f, '.js') + '-' + args[0];
494
+
495
+
496
+ // In case of globally installed, get the base dir where executable
497
+ // subcommand file should be located at
498
+ var baseDir
499
+ , link = readlink(f);
500
+
501
+ // when symbolink is relative path
502
+ if (link !== f && link.charAt(0) !== '/') {
503
+ link = path.join(dirname(f), link)
504
+ }
505
+ baseDir = dirname(link);
506
+
507
+ // prefer local `./<bin>` to bin in the $PATH
508
+ var localBin = path.join(baseDir, bin);
509
+
510
+ // whether bin file is a js script with explicit `.js` extension
511
+ var isExplicitJS = false;
512
+ if (exists(localBin + '.js')) {
513
+ bin = localBin + '.js';
514
+ isExplicitJS = true;
515
+ } else if (exists(localBin)) {
516
+ bin = localBin;
517
+ }
518
+
519
+ args = args.slice(1);
520
+
521
+ var proc;
522
+ if (process.platform !== 'win32') {
523
+ if (isExplicitJS) {
524
+ args.unshift(localBin);
525
+ // add executable arguments to spawn
526
+ args = (process.execArgv || []).concat(args);
527
+
528
+ proc = spawn('node', args, { stdio: 'inherit', customFds: [0, 1, 2] });
529
+ } else {
530
+ proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });
531
+ }
532
+ } else {
533
+ args.unshift(localBin);
534
+ proc = spawn(process.execPath, args, { stdio: 'inherit'});
535
+ }
536
+
537
+ proc.on('close', process.exit.bind(process));
538
+ proc.on('error', function(err) {
539
+ if (err.code == "ENOENT") {
540
+ console.error('\n %s(1) does not exist, try --help\n', bin);
541
+ } else if (err.code == "EACCES") {
542
+ console.error('\n %s(1) not executable. try chmod or run with root\n', bin);
543
+ }
544
+ process.exit(1);
545
+ });
546
+
547
+ this.runningCommand = proc;
548
+ };
549
+
550
+ /**
551
+ * Normalize `args`, splitting joined short flags. For example
552
+ * the arg "-abc" is equivalent to "-a -b -c".
553
+ * This also normalizes equal sign and splits "--abc=def" into "--abc def".
554
+ *
555
+ * @param {Array} args
556
+ * @return {Array}
557
+ * @api private
558
+ */
559
+
560
+ Command.prototype.normalize = function(args) {
561
+ var ret = []
562
+ , arg
563
+ , lastOpt
564
+ , index;
565
+
566
+ for (var i = 0, len = args.length; i < len; ++i) {
567
+ arg = args[i];
568
+ if (i > 0) {
569
+ lastOpt = this.optionFor(args[i-1]);
570
+ }
571
+
572
+ if (arg === '--') {
573
+ // Honor option terminator
574
+ ret = ret.concat(args.slice(i));
575
+ break;
576
+ } else if (lastOpt && lastOpt.required) {
577
+ ret.push(arg);
578
+ } else if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) {
579
+ arg.slice(1).split('').forEach(function(c) {
580
+ ret.push('-' + c);
581
+ });
582
+ } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {
583
+ ret.push(arg.slice(0, index), arg.slice(index + 1));
584
+ } else {
585
+ ret.push(arg);
586
+ }
587
+ }
588
+
589
+ return ret;
590
+ };
591
+
592
+ /**
593
+ * Parse command `args`.
594
+ *
595
+ * When listener(s) are available those
596
+ * callbacks are invoked, otherwise the "*"
597
+ * event is emitted and those actions are invoked.
598
+ *
599
+ * @param {Array} args
600
+ * @return {Command} for chaining
601
+ * @api private
602
+ */
603
+
604
+ Command.prototype.parseArgs = function(args, unknown) {
605
+ var name;
606
+
607
+ if (args.length) {
608
+ name = args[0];
609
+ if (this.listeners(name).length) {
610
+ this.emit(args.shift(), args, unknown);
611
+ } else {
612
+ this.emit('*', args);
613
+ }
614
+ } else {
615
+ outputHelpIfNecessary(this, unknown);
616
+
617
+ // If there were no args and we have unknown options,
618
+ // then they are extraneous and we need to error.
619
+ if (unknown.length > 0) {
620
+ this.unknownOption(unknown[0]);
621
+ }
622
+ }
623
+
624
+ return this;
625
+ };
626
+
627
+ /**
628
+ * Return an option matching `arg` if any.
629
+ *
630
+ * @param {String} arg
631
+ * @return {Option}
632
+ * @api private
633
+ */
634
+
635
+ Command.prototype.optionFor = function(arg) {
636
+ for (var i = 0, len = this.options.length; i < len; ++i) {
637
+ if (this.options[i].is(arg)) {
638
+ return this.options[i];
639
+ }
640
+ }
641
+ };
642
+
643
+ /**
644
+ * Parse options from `argv` returning `argv`
645
+ * void of these options.
646
+ *
647
+ * @param {Array} argv
648
+ * @return {Array}
649
+ * @api public
650
+ */
651
+
652
+ Command.prototype.parseOptions = function(argv) {
653
+ var args = []
654
+ , len = argv.length
655
+ , literal
656
+ , option
657
+ , arg;
658
+
659
+ var unknownOptions = [];
660
+
661
+ // parse options
662
+ for (var i = 0; i < len; ++i) {
663
+ arg = argv[i];
664
+
665
+ // literal args after --
666
+ if ('--' == arg) {
667
+ literal = true;
668
+ continue;
669
+ }
670
+
671
+ if (literal) {
672
+ args.push(arg);
673
+ continue;
674
+ }
675
+
676
+ // find matching Option
677
+ option = this.optionFor(arg);
678
+
679
+ // option is defined
680
+ if (option) {
681
+ // requires arg
682
+ if (option.required) {
683
+ arg = argv[++i];
684
+ if (null == arg) return this.optionMissingArgument(option);
685
+ this.emit(option.name(), arg);
686
+ // optional arg
687
+ } else if (option.optional) {
688
+ arg = argv[i+1];
689
+ if (null == arg || ('-' == arg[0] && '-' != arg)) {
690
+ arg = null;
691
+ } else {
692
+ ++i;
693
+ }
694
+ this.emit(option.name(), arg);
695
+ // bool
696
+ } else {
697
+ this.emit(option.name());
698
+ }
699
+ continue;
700
+ }
701
+
702
+ // looks like an option
703
+ if (arg.length > 1 && '-' == arg[0]) {
704
+ unknownOptions.push(arg);
705
+
706
+ // If the next argument looks like it might be
707
+ // an argument for this option, we pass it on.
708
+ // If it isn't, then it'll simply be ignored
709
+ if (argv[i+1] && '-' != argv[i+1][0]) {
710
+ unknownOptions.push(argv[++i]);
711
+ }
712
+ continue;
713
+ }
714
+
715
+ // arg
716
+ args.push(arg);
717
+ }
718
+
719
+ return { args: args, unknown: unknownOptions };
720
+ };
721
+
722
+ /**
723
+ * Return an object containing options as key-value pairs
724
+ *
725
+ * @return {Object}
726
+ * @api public
727
+ */
728
+ Command.prototype.opts = function() {
729
+ var result = {}
730
+ , len = this.options.length;
731
+
732
+ for (var i = 0 ; i < len; i++) {
733
+ var key = camelcase(this.options[i].name());
734
+ result[key] = key === 'version' ? this._version : this[key];
735
+ }
736
+ return result;
737
+ };
738
+
739
+ /**
740
+ * Argument `name` is missing.
741
+ *
742
+ * @param {String} name
743
+ * @api private
744
+ */
745
+
746
+ Command.prototype.missingArgument = function(name) {
747
+ console.error();
748
+ console.error(" error: missing required argument `%s'", name);
749
+ console.error();
750
+ process.exit(1);
751
+ };
752
+
753
+ /**
754
+ * `Option` is missing an argument, but received `flag` or nothing.
755
+ *
756
+ * @param {String} option
757
+ * @param {String} flag
758
+ * @api private
759
+ */
760
+
761
+ Command.prototype.optionMissingArgument = function(option, flag) {
762
+ console.error();
763
+ if (flag) {
764
+ console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag);
765
+ } else {
766
+ console.error(" error: option `%s' argument missing", option.flags);
767
+ }
768
+ console.error();
769
+ process.exit(1);
770
+ };
771
+
772
+ /**
773
+ * Unknown option `flag`.
774
+ *
775
+ * @param {String} flag
776
+ * @api private
777
+ */
778
+
779
+ Command.prototype.unknownOption = function(flag) {
780
+ if (this._allowUnknownOption) return;
781
+ console.error();
782
+ console.error(" error: unknown option `%s'", flag);
783
+ console.error();
784
+ process.exit(1);
785
+ };
786
+
787
+ /**
788
+ * Variadic argument with `name` is not the last argument as required.
789
+ *
790
+ * @param {String} name
791
+ * @api private
792
+ */
793
+
794
+ Command.prototype.variadicArgNotLast = function(name) {
795
+ console.error();
796
+ console.error(" error: variadic arguments must be last `%s'", name);
797
+ console.error();
798
+ process.exit(1);
799
+ };
800
+
801
+ /**
802
+ * Set the program version to `str`.
803
+ *
804
+ * This method auto-registers the "-V, --version" flag
805
+ * which will print the version number when passed.
806
+ *
807
+ * @param {String} str
808
+ * @param {String} flags
809
+ * @return {Command} for chaining
810
+ * @api public
811
+ */
812
+
813
+ Command.prototype.version = function(str, flags) {
814
+ if (0 == arguments.length) return this._version;
815
+ this._version = str;
816
+ flags = flags || '-V, --version';
817
+ this.option(flags, 'output the version number');
818
+ this.on('version', function() {
819
+ process.stdout.write(str + '\n');
820
+ process.exit(0);
821
+ });
822
+ return this;
823
+ };
824
+
825
+ /**
826
+ * Set the description to `str`.
827
+ *
828
+ * @param {String} str
829
+ * @return {String|Command}
830
+ * @api public
831
+ */
832
+
833
+ Command.prototype.description = function(str) {
834
+ if (0 == arguments.length) return this._description;
835
+ this._description = str;
836
+ return this;
837
+ };
838
+
839
+ /**
840
+ * Set an alias for the command
841
+ *
842
+ * @param {String} alias
843
+ * @return {String|Command}
844
+ * @api public
845
+ */
846
+
847
+ Command.prototype.alias = function(alias) {
848
+ if (0 == arguments.length) return this._alias;
849
+ this._alias = alias;
850
+ return this;
851
+ };
852
+
853
+ /**
854
+ * Set / get the command usage `str`.
855
+ *
856
+ * @param {String} str
857
+ * @return {String|Command}
858
+ * @api public
859
+ */
860
+
861
+ Command.prototype.usage = function(str) {
862
+ var args = this._args.map(function(arg) {
863
+ return humanReadableArgName(arg);
864
+ });
865
+
866
+ var usage = '[options]'
867
+ + (this.commands.length ? ' [command]' : '')
868
+ + (this._args.length ? ' ' + args.join(' ') : '');
869
+
870
+ if (0 == arguments.length) return this._usage || usage;
871
+ this._usage = str;
872
+
873
+ return this;
874
+ };
875
+
876
+ /**
877
+ * Get the name of the command
878
+ *
879
+ * @param {String} name
880
+ * @return {String|Command}
881
+ * @api public
882
+ */
883
+
884
+ Command.prototype.name = function() {
885
+ return this._name;
886
+ };
887
+
888
+ /**
889
+ * Return the largest option length.
890
+ *
891
+ * @return {Number}
892
+ * @api private
893
+ */
894
+
895
+ Command.prototype.largestOptionLength = function() {
896
+ return this.options.reduce(function(max, option) {
897
+ return Math.max(max, option.flags.length);
898
+ }, 0);
899
+ };
900
+
901
+ /**
902
+ * Return help for options.
903
+ *
904
+ * @return {String}
905
+ * @api private
906
+ */
907
+
908
+ Command.prototype.optionHelp = function() {
909
+ var width = this.largestOptionLength();
910
+
911
+ // Prepend the help information
912
+ return [pad('-h, --help', width) + ' ' + 'output usage information']
913
+ .concat(this.options.map(function(option) {
914
+ return pad(option.flags, width) + ' ' + option.description;
915
+ }))
916
+ .join('\n');
917
+ };
918
+
919
+ /**
920
+ * Return command help documentation.
921
+ *
922
+ * @return {String}
923
+ * @api private
924
+ */
925
+
926
+ Command.prototype.commandHelp = function() {
927
+ if (!this.commands.length) return '';
928
+
929
+ var commands = this.commands.filter(function(cmd) {
930
+ return !cmd._noHelp;
931
+ }).map(function(cmd) {
932
+ var args = cmd._args.map(function(arg) {
933
+ return humanReadableArgName(arg);
934
+ }).join(' ');
935
+
936
+ return [
937
+ cmd._name
938
+ + (cmd._alias
939
+ ? '|' + cmd._alias
940
+ : '')
941
+ + (cmd.options.length
942
+ ? ' [options]'
943
+ : '')
944
+ + ' ' + args
945
+ , cmd.description()
946
+ ];
947
+ });
948
+
949
+ var width = commands.reduce(function(max, command) {
950
+ return Math.max(max, command[0].length);
951
+ }, 0);
952
+
953
+ return [
954
+ ''
955
+ , ' Commands:'
956
+ , ''
957
+ , commands.map(function(cmd) {
958
+ return pad(cmd[0], width) + ' ' + cmd[1];
959
+ }).join('\n').replace(/^/gm, ' ')
960
+ , ''
961
+ ].join('\n');
962
+ };
963
+
964
+ /**
965
+ * Return program help documentation.
966
+ *
967
+ * @return {String}
968
+ * @api private
969
+ */
970
+
971
+ Command.prototype.helpInformation = function() {
972
+ var desc = [];
973
+ if (this._description) {
974
+ desc = [
975
+ ' ' + this._description
976
+ , ''
977
+ ];
978
+ }
979
+
980
+ var cmdName = this._name;
981
+ if (this._alias) {
982
+ cmdName = cmdName + '|' + this._alias;
983
+ }
984
+ var usage = [
985
+ ''
986
+ ,' Usage: ' + cmdName + ' ' + this.usage()
987
+ , ''
988
+ ];
989
+
990
+ var cmds = [];
991
+ var commandHelp = this.commandHelp();
992
+ if (commandHelp) cmds = [commandHelp];
993
+
994
+ var options = [
995
+ ' Options:'
996
+ , ''
997
+ , '' + this.optionHelp().replace(/^/gm, ' ')
998
+ , ''
999
+ , ''
1000
+ ];
1001
+
1002
+ return usage
1003
+ .concat(cmds)
1004
+ .concat(desc)
1005
+ .concat(options)
1006
+ .join('\n');
1007
+ };
1008
+
1009
+ /**
1010
+ * Output help information for this command
1011
+ *
1012
+ * @api public
1013
+ */
1014
+
1015
+ Command.prototype.outputHelp = function() {
1016
+ process.stdout.write(this.helpInformation());
1017
+ this.emit('--help');
1018
+ };
1019
+
1020
+ /**
1021
+ * Output help information and exit.
1022
+ *
1023
+ * @api public
1024
+ */
1025
+
1026
+ Command.prototype.help = function() {
1027
+ this.outputHelp();
1028
+ process.exit();
1029
+ };
1030
+
1031
+ /**
1032
+ * Camel-case the given `flag`
1033
+ *
1034
+ * @param {String} flag
1035
+ * @return {String}
1036
+ * @api private
1037
+ */
1038
+
1039
+ function camelcase(flag) {
1040
+ return flag.split('-').reduce(function(str, word) {
1041
+ return str + word[0].toUpperCase() + word.slice(1);
1042
+ });
1043
+ }
1044
+
1045
+ /**
1046
+ * Pad `str` to `width`.
1047
+ *
1048
+ * @param {String} str
1049
+ * @param {Number} width
1050
+ * @return {String}
1051
+ * @api private
1052
+ */
1053
+
1054
+ function pad(str, width) {
1055
+ var len = Math.max(0, width - str.length);
1056
+ return str + Array(len + 1).join(' ');
1057
+ }
1058
+
1059
+ /**
1060
+ * Output help information if necessary
1061
+ *
1062
+ * @param {Command} command to output help for
1063
+ * @param {Array} array of options to search for -h or --help
1064
+ * @api private
1065
+ */
1066
+
1067
+ function outputHelpIfNecessary(cmd, options) {
1068
+ options = options || [];
1069
+ for (var i = 0; i < options.length; i++) {
1070
+ if (options[i] == '--help' || options[i] == '-h') {
1071
+ cmd.outputHelp();
1072
+ process.exit(0);
1073
+ }
1074
+ }
1075
+ }
1076
+
1077
+ /**
1078
+ * Takes an argument an returns its human readable equivalent for help usage.
1079
+ *
1080
+ * @param {Object} arg
1081
+ * @return {String}
1082
+ * @api private
1083
+ */
1084
+
1085
+ function humanReadableArgName(arg) {
1086
+ var nameOutput = arg.name + (arg.variadic === true ? '...' : '');
1087
+
1088
+ return arg.required
1089
+ ? '<' + nameOutput + '>'
1090
+ : '[' + nameOutput + ']'
1091
+ }
1092
+
1093
+ // for versions before node v0.8 when there weren't `fs.existsSync`
1094
+ function exists(file) {
1095
+ try {
1096
+ if (fs.statSync(file).isFile()) {
1097
+ return true;
1098
+ }
1099
+ } catch (e) {
1100
+ return false;
1101
+ }
1102
+ }
1103
+