spade-packager 0.1.0

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 (316) hide show
  1. data/.gitignore +2 -0
  2. data/.gitmodules +6 -0
  3. data/bin/spadepkg +8 -0
  4. data/lib/libgems_ext.rb +8 -0
  5. data/lib/libgems_ext/config_file.rb +33 -0
  6. data/lib/libgems_ext/dependency_installer.rb +150 -0
  7. data/lib/libgems_ext/installer.rb +39 -0
  8. data/lib/libgems_ext/libgems.rb +39 -0
  9. data/lib/libgems_ext/spec_fetcher.rb +11 -0
  10. data/lib/spade-packager.rb +1 -0
  11. data/lib/spade/packager.rb +18 -0
  12. data/lib/spade/packager/cli.rb +9 -0
  13. data/lib/spade/packager/cli/base.rb +196 -0
  14. data/lib/spade/packager/cli/owner.rb +46 -0
  15. data/lib/spade/packager/cli/project_generator.rb +117 -0
  16. data/lib/spade/packager/credentials.rb +38 -0
  17. data/lib/spade/packager/local.rb +50 -0
  18. data/lib/spade/packager/package.rb +160 -0
  19. data/lib/spade/packager/remote.rb +98 -0
  20. data/lib/spade/packager/repository.rb +18 -0
  21. data/lib/spade/packager/version.rb +5 -0
  22. data/packages/coffee-script/.gitignore +8 -0
  23. data/packages/coffee-script/.npmignore +11 -0
  24. data/packages/coffee-script/Cakefile +229 -0
  25. data/packages/coffee-script/LICENSE +22 -0
  26. data/packages/coffee-script/README +47 -0
  27. data/packages/coffee-script/Rakefile +78 -0
  28. data/packages/coffee-script/bin/cake +7 -0
  29. data/packages/coffee-script/bin/coffee +7 -0
  30. data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
  31. data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
  32. data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
  33. data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
  34. data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
  35. data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
  36. data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
  37. data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
  38. data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
  39. data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
  40. data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
  41. data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
  42. data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
  43. data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
  44. data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
  45. data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
  46. data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
  47. data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
  48. data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
  49. data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
  50. data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
  51. data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
  52. data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
  53. data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
  54. data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
  55. data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
  56. data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
  57. data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
  58. data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
  59. data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
  60. data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
  61. data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
  62. data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
  63. data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
  64. data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
  65. data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
  66. data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
  67. data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
  68. data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
  69. data/packages/coffee-script/documentation/css/docs.css +374 -0
  70. data/packages/coffee-script/documentation/css/idle.css +64 -0
  71. data/packages/coffee-script/documentation/docs/browser.html +25 -0
  72. data/packages/coffee-script/documentation/docs/cake.html +43 -0
  73. data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
  74. data/packages/coffee-script/documentation/docs/command.html +161 -0
  75. data/packages/coffee-script/documentation/docs/docco.css +186 -0
  76. data/packages/coffee-script/documentation/docs/grammar.html +399 -0
  77. data/packages/coffee-script/documentation/docs/helpers.html +31 -0
  78. data/packages/coffee-script/documentation/docs/index.html +3 -0
  79. data/packages/coffee-script/documentation/docs/lexer.html +490 -0
  80. data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
  81. data/packages/coffee-script/documentation/docs/optparse.html +78 -0
  82. data/packages/coffee-script/documentation/docs/repl.html +24 -0
  83. data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
  84. data/packages/coffee-script/documentation/docs/scope.html +54 -0
  85. data/packages/coffee-script/documentation/docs/underscore.html +295 -0
  86. data/packages/coffee-script/documentation/images/background.png +0 -0
  87. data/packages/coffee-script/documentation/images/banding.png +0 -0
  88. data/packages/coffee-script/documentation/images/button_bg.png +0 -0
  89. data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
  90. data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
  91. data/packages/coffee-script/documentation/images/favicon.ico +0 -0
  92. data/packages/coffee-script/documentation/images/logo.png +0 -0
  93. data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
  94. data/packages/coffee-script/documentation/index.html.erb +1607 -0
  95. data/packages/coffee-script/documentation/js/aliases.js +17 -0
  96. data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
  97. data/packages/coffee-script/documentation/js/block_comment.js +4 -0
  98. data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
  99. data/packages/coffee-script/documentation/js/classes.js +44 -0
  100. data/packages/coffee-script/documentation/js/comparisons.js +3 -0
  101. data/packages/coffee-script/documentation/js/conditionals.js +12 -0
  102. data/packages/coffee-script/documentation/js/default_args.js +7 -0
  103. data/packages/coffee-script/documentation/js/do.js +10 -0
  104. data/packages/coffee-script/documentation/js/embedded.js +4 -0
  105. data/packages/coffee-script/documentation/js/existence.js +6 -0
  106. data/packages/coffee-script/documentation/js/expressions.js +15 -0
  107. data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
  108. data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
  109. data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
  110. data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
  111. data/packages/coffee-script/documentation/js/functions.js +7 -0
  112. data/packages/coffee-script/documentation/js/heredocs.js +2 -0
  113. data/packages/coffee-script/documentation/js/heregexes.js +2 -0
  114. data/packages/coffee-script/documentation/js/interpolation.js +4 -0
  115. data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
  116. data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
  117. data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
  118. data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
  119. data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
  120. data/packages/coffee-script/documentation/js/overview.js +35 -0
  121. data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
  122. data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
  123. data/packages/coffee-script/documentation/js/prototypes.js +3 -0
  124. data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
  125. data/packages/coffee-script/documentation/js/scope.js +8 -0
  126. data/packages/coffee-script/documentation/js/slices.js +4 -0
  127. data/packages/coffee-script/documentation/js/soaks.js +2 -0
  128. data/packages/coffee-script/documentation/js/splats.js +15 -0
  129. data/packages/coffee-script/documentation/js/splices.js +3 -0
  130. data/packages/coffee-script/documentation/js/strings.js +2 -0
  131. data/packages/coffee-script/documentation/js/switch.js +23 -0
  132. data/packages/coffee-script/documentation/js/try.js +8 -0
  133. data/packages/coffee-script/documentation/js/while.js +18 -0
  134. data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
  135. data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
  136. data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
  137. data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
  138. data/packages/coffee-script/examples/blocks.coffee +54 -0
  139. data/packages/coffee-script/examples/code.coffee +167 -0
  140. data/packages/coffee-script/examples/computer_science/README +4 -0
  141. data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
  142. data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
  143. data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
  144. data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
  145. data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
  146. data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
  147. data/packages/coffee-script/examples/poignant.coffee +181 -0
  148. data/packages/coffee-script/examples/potion.coffee +206 -0
  149. data/packages/coffee-script/examples/underscore.coffee +682 -0
  150. data/packages/coffee-script/examples/web_server.coffee +12 -0
  151. data/packages/coffee-script/extras/EXTRAS +7 -0
  152. data/packages/coffee-script/extras/coffee-script.js +8 -0
  153. data/packages/coffee-script/extras/jsl.conf +44 -0
  154. data/packages/coffee-script/index.html +2515 -0
  155. data/packages/coffee-script/lib/browser.js +52 -0
  156. data/packages/coffee-script/lib/cake.js +76 -0
  157. data/packages/coffee-script/lib/coffee-script.js +82 -0
  158. data/packages/coffee-script/lib/command.js +263 -0
  159. data/packages/coffee-script/lib/grammar.js +581 -0
  160. data/packages/coffee-script/lib/helpers.js +66 -0
  161. data/packages/coffee-script/lib/index.js +8 -0
  162. data/packages/coffee-script/lib/lexer.js +633 -0
  163. data/packages/coffee-script/lib/nodes.js +2165 -0
  164. data/packages/coffee-script/lib/optparse.js +111 -0
  165. data/packages/coffee-script/lib/parser.js +649 -0
  166. data/packages/coffee-script/lib/repl.js +42 -0
  167. data/packages/coffee-script/lib/rewriter.js +353 -0
  168. data/packages/coffee-script/lib/scope.js +120 -0
  169. data/packages/coffee-script/lib/spade-format.js +45 -0
  170. data/packages/coffee-script/package.json +26 -0
  171. data/packages/coffee-script/src/browser.coffee +43 -0
  172. data/packages/coffee-script/src/cake.coffee +69 -0
  173. data/packages/coffee-script/src/coffee-script.coffee +92 -0
  174. data/packages/coffee-script/src/command.coffee +214 -0
  175. data/packages/coffee-script/src/grammar.coffee +590 -0
  176. data/packages/coffee-script/src/helpers.coffee +56 -0
  177. data/packages/coffee-script/src/index.coffee +2 -0
  178. data/packages/coffee-script/src/lexer.coffee +653 -0
  179. data/packages/coffee-script/src/nodes.coffee +1754 -0
  180. data/packages/coffee-script/src/optparse.coffee +99 -0
  181. data/packages/coffee-script/src/repl.coffee +42 -0
  182. data/packages/coffee-script/src/rewriter.coffee +326 -0
  183. data/packages/coffee-script/src/scope.coffee +94 -0
  184. data/packages/coffee-script/test/arguments.coffee +127 -0
  185. data/packages/coffee-script/test/assignment.coffee +98 -0
  186. data/packages/coffee-script/test/break.coffee +18 -0
  187. data/packages/coffee-script/test/comments.coffee +201 -0
  188. data/packages/coffee-script/test/conditionals.coffee +181 -0
  189. data/packages/coffee-script/test/exception_handling.coffee +90 -0
  190. data/packages/coffee-script/test/helpers.coffee +96 -0
  191. data/packages/coffee-script/test/importing.coffee +18 -0
  192. data/packages/coffee-script/test/operators.coffee +225 -0
  193. data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
  194. data/packages/coffee-script/test/regular_expressions.coffee +56 -0
  195. data/packages/coffee-script/test/test.html +123 -0
  196. data/packages/coffee-script/test/test_chaining.coffee +77 -0
  197. data/packages/coffee-script/test/test_classes.coffee +372 -0
  198. data/packages/coffee-script/test/test_compilation.coffee +26 -0
  199. data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
  200. data/packages/coffee-script/test/test_existence.coffee +165 -0
  201. data/packages/coffee-script/test/test_functions.coffee +379 -0
  202. data/packages/coffee-script/test/test_heredocs.coffee +111 -0
  203. data/packages/coffee-script/test/test_literals.coffee +270 -0
  204. data/packages/coffee-script/test/test_option_parser.coffee +27 -0
  205. data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
  206. data/packages/coffee-script/test/test_returns.coffee +63 -0
  207. data/packages/coffee-script/test/test_splats.coffee +102 -0
  208. data/packages/coffee-script/test/test_strings.coffee +118 -0
  209. data/packages/coffee-script/test/test_switch.coffee +103 -0
  210. data/packages/coffee-script/test/test_while.coffee +71 -0
  211. data/packages/ivory/LICENSE.txt +1 -0
  212. data/packages/ivory/README.md +19 -0
  213. data/packages/ivory/lib/buffer.js +111 -0
  214. data/packages/ivory/lib/events.js +137 -0
  215. data/packages/ivory/lib/fs.js +266 -0
  216. data/packages/ivory/lib/main.js +13 -0
  217. data/packages/ivory/lib/path.js +158 -0
  218. data/packages/ivory/lib/ruby/buffer.rb +145 -0
  219. data/packages/ivory/lib/ruby/constants.rb +585 -0
  220. data/packages/ivory/lib/ruby/events.rb +32 -0
  221. data/packages/ivory/lib/ruby/fs.rb +245 -0
  222. data/packages/ivory/lib/ruby/process.rb +28 -0
  223. data/packages/ivory/lib/stream.js +115 -0
  224. data/packages/ivory/lib/util.js +414 -0
  225. data/packages/ivory/package.json +11 -0
  226. data/packages/ivory/spade-boot.js +78 -0
  227. data/packages/jquery/main.js +7179 -0
  228. data/packages/jquery/package.json +10 -0
  229. data/packages/json/lib/main.js +14 -0
  230. data/packages/json/package.json +8 -0
  231. data/packages/lproj/README.md +77 -0
  232. data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
  233. data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
  234. data/packages/lproj/examples/demo-app/index.html +8 -0
  235. data/packages/lproj/examples/demo-app/lib/main.js +7 -0
  236. data/packages/lproj/examples/demo-app/package.json +9 -0
  237. data/packages/lproj/lib/main.js +78 -0
  238. data/packages/lproj/lib/strings-format.js +6 -0
  239. data/packages/lproj/package.json +9 -0
  240. data/packages/optparse/README.md +161 -0
  241. data/packages/optparse/TODO +1 -0
  242. data/packages/optparse/examples/browser-test.html +75 -0
  243. data/packages/optparse/examples/nodejs-test.js +90 -0
  244. data/packages/optparse/lib/optparse.js +309 -0
  245. data/packages/optparse/package.json +13 -0
  246. data/packages/optparse/seed.yml +5 -0
  247. data/packages/text/lib/main.js +8 -0
  248. data/packages/text/package.json +9 -0
  249. data/packages/web-file/README.md +7 -0
  250. data/packages/web-file/lib/errors.js +32 -0
  251. data/packages/web-file/lib/file-reader.js +10 -0
  252. data/packages/web-file/lib/file-system.js +234 -0
  253. data/packages/web-file/lib/file-writer.js +10 -0
  254. data/packages/web-file/lib/file.js +9 -0
  255. data/packages/web-file/lib/main.js +34 -0
  256. data/packages/web-file/lib/platform.js +25 -0
  257. data/packages/web-file/lib/ruby/file.rb +252 -0
  258. data/packages/web-file/lib/ruby/file_reader.rb +69 -0
  259. data/packages/web-file/lib/ruby/file_system.rb +134 -0
  260. data/packages/web-file/lib/ruby/file_writer.rb +78 -0
  261. data/packages/web-file/package.json +12 -0
  262. data/packages/web-typed-array/README.md +7 -0
  263. data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
  264. data/packages/web-typed-array/lib/array-buffer.js +7 -0
  265. data/packages/web-typed-array/lib/main.js +33 -0
  266. data/packages/web-typed-array/lib/platform.js +20 -0
  267. data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
  268. data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
  269. data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
  270. data/packages/web-typed-array/lib/typed-array.js +26 -0
  271. data/packages/web-typed-array/package.json +9 -0
  272. data/spade-packager.gemspec +39 -0
  273. data/spec/cli/build_spec.rb +57 -0
  274. data/spec/cli/install_spec.rb +119 -0
  275. data/spec/cli/installed_spec.rb +55 -0
  276. data/spec/cli/list_spec.rb +74 -0
  277. data/spec/cli/login_spec.rb +75 -0
  278. data/spec/cli/new_spec.rb +5 -0
  279. data/spec/cli/owner_spec.rb +114 -0
  280. data/spec/cli/push_spec.rb +73 -0
  281. data/spec/cli/uninstall_spec.rb +58 -0
  282. data/spec/cli/unpack_spec.rb +72 -0
  283. data/spec/cli/unyank_spec.rb +73 -0
  284. data/spec/cli/yank_spec.rb +73 -0
  285. data/spec/credentials_spec.rb +23 -0
  286. data/spec/fixtures/badrake-0.8.7.spd +0 -0
  287. data/spec/fixtures/builder-3.0.0.spd +0 -0
  288. data/spec/fixtures/bundler-1.1.pre.spd +0 -0
  289. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  290. data/spec/fixtures/core-test-0.4.3.spd +0 -0
  291. data/spec/fixtures/core-test/bin/cot +3 -0
  292. data/spec/fixtures/core-test/lib/main.js +1 -0
  293. data/spec/fixtures/core-test/resources/runner.css +0 -0
  294. data/spec/fixtures/core-test/tests/test.js +1 -0
  295. data/spec/fixtures/highline-1.6.1.spd +0 -0
  296. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  297. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  298. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  299. data/spec/fixtures/package.json +30 -0
  300. data/spec/fixtures/rake-0.8.6.spd +0 -0
  301. data/spec/fixtures/rake-0.8.7.spd +0 -0
  302. data/spec/gauntlet_spec.rb +27 -0
  303. data/spec/package_spec.rb +267 -0
  304. data/spec/spec_helper.rb +32 -0
  305. data/spec/support/cli.rb +103 -0
  306. data/spec/support/fake.rb +48 -0
  307. data/spec/support/fake_gem_server.rb +67 -0
  308. data/spec/support/fake_gemcutter.rb +50 -0
  309. data/spec/support/matchers.rb +32 -0
  310. data/spec/support/path.rb +61 -0
  311. data/templates/project/LICENSE +19 -0
  312. data/templates/project/README.md +21 -0
  313. data/templates/project/lib/main.js +9 -0
  314. data/templates/project/project.json +31 -0
  315. data/templates/project/tests/main-test.js +8 -0
  316. metadata +484 -0
@@ -0,0 +1,45 @@
1
+ var _ref = require('./lexer'), Lexer = _ref.Lexer, RESERVED = _ref.RESERVED;
2
+ var parser = require('./parser').parser, lexer;
3
+
4
+ lexer = new Lexer();
5
+
6
+ parser.lexer = {
7
+ lex: function() {
8
+ var tag, _ref;
9
+ _ref = this.tokens[this.pos++] || [''];
10
+ tag = _ref[0];
11
+ this.yytext = _ref[1];
12
+ this.yylineno = _ref[2];
13
+ return tag;
14
+ },
15
+ setInput: function(tokens) {
16
+ this.tokens = tokens;
17
+ this.pos = 0;
18
+ return 0;
19
+ },
20
+ upcomingInput: function() {
21
+ return "";
22
+ }
23
+ };
24
+
25
+ parser.yy = require('./nodes');
26
+
27
+
28
+ exports.compile = function(code, options) {
29
+ if (options === null) {
30
+ options = {};
31
+ }
32
+ try {
33
+ return parser.parse(lexer.tokenize(code)).compile(options);
34
+ } catch (err) {
35
+ if (options.fileName) {
36
+ err.message = "In " + options.fileName + ", " + err.message;
37
+ }
38
+ throw err;
39
+ }
40
+ };
41
+
42
+ exports.compileFormat = function(code) {
43
+ return exports.compile(code, {});
44
+ };
45
+
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "coffee-script",
3
+ "description": "Unfancy JavaScript",
4
+ "keywords": ["javascript", "language", "coffeescript", "compiler"],
5
+ "author": "Jeremy Ashkenas",
6
+ "version": "1.0.1-pre",
7
+ "licenses": [{
8
+ "type": "MIT",
9
+ "url": "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
10
+ }],
11
+ "engines": {
12
+ "node": ">=0.2.5"
13
+ },
14
+ "directories" : {
15
+ "lib" : "./lib"
16
+ },
17
+ "main" : "./lib/coffee-script",
18
+ "bin": {
19
+ "coffee": "./bin/coffee",
20
+ "cake": "./bin/cake"
21
+ },
22
+
23
+ "plugin:formats": {
24
+ "coffee": "coffee-script/spade-format"
25
+ }
26
+ }
@@ -0,0 +1,43 @@
1
+ # Override exported methods for non-Node.js engines.
2
+
3
+ CoffeeScript = require './coffee-script'
4
+ CoffeeScript.require = require
5
+
6
+ # Use standard JavaScript `eval` to eval code.
7
+ CoffeeScript.eval = (code, options) ->
8
+ eval CoffeeScript.compile code, options
9
+
10
+ # Running code does not provide access to this scope.
11
+ CoffeeScript.run = (code, options = {}) ->
12
+ options.bare = on
13
+ Function(CoffeeScript.compile code, options)()
14
+
15
+ # If we're not in a browser environment, we're finished with the public API.
16
+ return unless window?
17
+
18
+ # Load a remote script from the current domain via XHR.
19
+ CoffeeScript.load = (url, options) ->
20
+ xhr = new (window.ActiveXObject or XMLHttpRequest)('Microsoft.XMLHTTP')
21
+ xhr.open 'GET', url, true
22
+ xhr.overrideMimeType 'text/plain' if 'overrideMimeType' of xhr
23
+ xhr.onreadystatechange = ->
24
+ CoffeeScript.run xhr.responseText, options if xhr.readyState is 4
25
+ xhr.send null
26
+
27
+ # Activate CoffeeScript in the browser by having it compile and evaluate
28
+ # all script tags with a content-type of `text/coffeescript`.
29
+ # This happens on page load.
30
+ runScripts = ->
31
+ for script in document.getElementsByTagName 'script'
32
+ if script.type is 'text/coffeescript'
33
+ if script.src
34
+ CoffeeScript.load script.src
35
+ else
36
+ CoffeeScript.run script.innerHTML
37
+ null
38
+
39
+ # Listen for window load, both in browsers and in IE.
40
+ if window.addEventListener
41
+ addEventListener 'DOMContentLoaded', runScripts, no
42
+ else
43
+ attachEvent 'onload', runScripts
@@ -0,0 +1,69 @@
1
+ # `cake` is a simplified version of [Make](http://www.gnu.org/software/make/)
2
+ # ([Rake](http://rake.rubyforge.org/), [Jake](http://github.com/280north/jake))
3
+ # for CoffeeScript. You define tasks with names and descriptions in a Cakefile,
4
+ # and can call them from the command line, or invoke them from other tasks.
5
+ #
6
+ # Running `cake` with no arguments will print out a list of all the tasks in the
7
+ # current directory's Cakefile.
8
+
9
+ # External dependencies.
10
+ fs = require 'fs'
11
+ path = require 'path'
12
+ helpers = require './helpers'
13
+ optparse = require './optparse'
14
+ CoffeeScript = require './coffee-script'
15
+
16
+ # Keep track of the list of defined tasks, the accepted options, and so on.
17
+ tasks = {}
18
+ options = {}
19
+ switches = []
20
+ oparse = null
21
+
22
+ # Mixin the top-level Cake functions for Cakefiles to use directly.
23
+ helpers.extend global,
24
+
25
+ # Define a Cake task with a short name, an optional sentence description,
26
+ # and the function to run as the action itself.
27
+ task: (name, description, action) ->
28
+ [action, description] = [description, action] unless action
29
+ tasks[name] = {name, description, action}
30
+
31
+ # Define an option that the Cakefile accepts. The parsed options hash,
32
+ # containing all of the command-line options passed, will be made available
33
+ # as the first argument to the action.
34
+ option: (letter, flag, description) ->
35
+ switches.push [letter, flag, description]
36
+
37
+ # Invoke another task in the current Cakefile.
38
+ invoke: (name) ->
39
+ missingTask name unless tasks[name]
40
+ tasks[name].action options
41
+
42
+
43
+ # Run `cake`. Executes all of the tasks you pass, in order. Note that Node's
44
+ # asynchrony may cause tasks to execute in a different order than you'd expect.
45
+ # If no tasks are passed, print the help screen.
46
+ exports.run = ->
47
+ path.exists 'Cakefile', (exists) ->
48
+ throw new Error("Cakefile not found in #{process.cwd()}") unless exists
49
+ args = process.argv.slice 2
50
+ CoffeeScript.run fs.readFileSync('Cakefile').toString(), fileName: 'Cakefile'
51
+ oparse = new optparse.OptionParser switches
52
+ return printTasks() unless args.length
53
+ options = oparse.parse(args)
54
+ invoke arg for arg in options.arguments
55
+
56
+ # Display the list of Cake tasks in a format similar to `rake -T`
57
+ printTasks = ->
58
+ console.log ''
59
+ for name, task of tasks
60
+ spaces = 20 - name.length
61
+ spaces = if spaces > 0 then Array(spaces + 1).join(' ') else ''
62
+ desc = if task.description then "# #{task.description}" else ''
63
+ console.log "cake #{name}#{spaces} #{desc}"
64
+ console.log oparse.help() if switches.length
65
+
66
+ # Print an error and exit when attempting to all an undefined task.
67
+ missingTask = (task) ->
68
+ console.log "No such task: \"#{task}\""
69
+ process.exit 1
@@ -0,0 +1,92 @@
1
+ # CoffeeScript can be used both on the server, as a command-line compiler based
2
+ # on Node.js/V8, or to run CoffeeScripts directly in the browser. This module
3
+ # contains the main entry functions for tokenizing, parsing, and compiling
4
+ # source CoffeeScript into JavaScript.
5
+ #
6
+ # If included on a webpage, it will automatically sniff out, compile, and
7
+ # execute all scripts present in `text/coffeescript` tags.
8
+
9
+ fs = require 'fs'
10
+ path = require 'path'
11
+ {Lexer,RESERVED} = require './lexer'
12
+ {parser} = require './parser'
13
+
14
+ # TODO: Remove registerExtension when fully deprecated.
15
+ if require.extensions
16
+ require.extensions['.coffee'] = (module, filename) ->
17
+ content = compile fs.readFileSync filename, 'utf8'
18
+ module._compile content, filename
19
+ else if require.registerExtension
20
+ require.registerExtension '.coffee', (content) -> compile content
21
+
22
+ # The current CoffeeScript version number.
23
+ exports.VERSION = '1.0.1-pre'
24
+
25
+ # Words that cannot be used as identifiers in CoffeeScript code
26
+ exports.RESERVED = RESERVED
27
+
28
+ # Expose helpers for testing.
29
+ exports.helpers = require './helpers'
30
+
31
+ # Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
32
+ # compiler.
33
+ exports.compile = compile = (code, options = {}) ->
34
+ try
35
+ (parser.parse lexer.tokenize code).compile options
36
+ catch err
37
+ err.message = "In #{options.fileName}, #{err.message}" if options.fileName
38
+ throw err
39
+
40
+ # Tokenize a string of CoffeeScript code, and return the array of tokens.
41
+ exports.tokens = (code, options) ->
42
+ lexer.tokenize code, options
43
+
44
+ # Parse a string of CoffeeScript code or an array of lexed tokens, and
45
+ # return the AST. You can then compile it by calling `.compile()` on the root,
46
+ # or traverse it by using `.traverse()` with a callback.
47
+ exports.nodes = (source, options) ->
48
+ if typeof source is 'string'
49
+ parser.parse lexer.tokenize source, options
50
+ else
51
+ parser.parse source
52
+
53
+ # Compile and execute a string of CoffeeScript (on the server), correctly
54
+ # setting `__filename`, `__dirname`, and relative `require()`.
55
+ exports.run = (code, options) ->
56
+ # We want the root module.
57
+ root = module
58
+ while root.parent
59
+ root = root.parent
60
+ # Set the filename.
61
+ root.filename = fs.realpathSync options.fileName or '.'
62
+ # Clear the module cache.
63
+ root.moduleCache = {} if root.moduleCache
64
+ # Compile.
65
+ if path.extname(root.filename) isnt '.coffee' or require.extensions
66
+ root._compile compile(code, options), root.filename
67
+ else
68
+ root._compile code, root.filename
69
+
70
+ # Compile and evaluate a string of CoffeeScript (in a Node.js-like environment).
71
+ # The CoffeeScript REPL uses this to run the input.
72
+ exports.eval = (code, options) ->
73
+ __filename = options.fileName
74
+ __dirname = path.dirname __filename
75
+ eval compile code, options
76
+
77
+ # Instantiate a Lexer for our use here.
78
+ lexer = new Lexer
79
+
80
+ # The real Lexer produces a generic stream of tokens. This object provides a
81
+ # thin wrapper around it, compatible with the Jison API. We can then pass it
82
+ # directly as a "Jison lexer".
83
+ parser.lexer =
84
+ lex: ->
85
+ [tag, @yytext, @yylineno] = @tokens[@pos++] or ['']
86
+ tag
87
+ setInput: (@tokens) ->
88
+ @pos = 0
89
+ upcomingInput: ->
90
+ ""
91
+
92
+ parser.yy = require './nodes'
@@ -0,0 +1,214 @@
1
+ # The `coffee` utility. Handles command-line compilation of CoffeeScript
2
+ # into various forms: saved into `.js` files or printed to stdout, piped to
3
+ # [JSLint](http://javascriptlint.com/) or recompiled every time the source is
4
+ # saved, printed as a token stream or as the syntax tree, or launch an
5
+ # interactive REPL.
6
+
7
+ # External dependencies.
8
+ fs = require 'fs'
9
+ path = require 'path'
10
+ util = require 'util'
11
+ helpers = require './helpers'
12
+ optparse = require './optparse'
13
+ CoffeeScript = require './coffee-script'
14
+ {spawn, exec} = require 'child_process'
15
+ {EventEmitter} = require 'events'
16
+
17
+ # Allow CoffeeScript to emit Node.js events.
18
+ helpers.extend CoffeeScript, new EventEmitter
19
+
20
+ printLine = (line) -> process.stdout.write line + '\n'
21
+ printWarn = (line) -> process.binding('stdio').writeError line + '\n'
22
+
23
+ # The help banner that is printed when `coffee` is called without arguments.
24
+ BANNER = '''
25
+ Usage: coffee [options] path/to/script.coffee
26
+ '''
27
+
28
+ # The list of all the valid option flags that `coffee` knows how to handle.
29
+ SWITCHES = [
30
+ ['-c', '--compile', 'compile to JavaScript and save as .js files']
31
+ ['-i', '--interactive', 'run an interactive CoffeeScript REPL']
32
+ ['-o', '--output [DIR]', 'set the directory for compiled JavaScript']
33
+ ['-j', '--join', 'concatenate the scripts before compiling']
34
+ ['-w', '--watch', 'watch scripts for changes, and recompile']
35
+ ['-p', '--print', 'print the compiled JavaScript to stdout']
36
+ ['-l', '--lint', 'pipe the compiled JavaScript through JSLint']
37
+ ['-s', '--stdio', 'listen for and compile scripts over stdio']
38
+ ['-e', '--eval', 'compile a string from the command line']
39
+ ['-r', '--require [FILE*]', 'require a library before executing your script']
40
+ ['-b', '--bare', 'compile without the top-level function wrapper']
41
+ ['-t', '--tokens', 'print the tokens that the lexer produces']
42
+ ['-n', '--nodes', 'print the parse tree that Jison produces']
43
+ [ '--nodejs [ARGS]', 'pass options through to the "node" binary']
44
+ ['-v', '--version', 'display CoffeeScript version']
45
+ ['-h', '--help', 'display this help message']
46
+ ]
47
+
48
+ # Top-level objects shared by all the functions.
49
+ opts = {}
50
+ sources = []
51
+ contents = []
52
+ optionParser = null
53
+
54
+ # Run `coffee` by parsing passed options and determining what action to take.
55
+ # Many flags cause us to divert before compiling anything. Flags passed after
56
+ # `--` will be passed verbatim to your script as arguments in `process.argv`
57
+ exports.run = ->
58
+ parseOptions()
59
+ return forkNode() if opts.nodejs
60
+ return usage() if opts.help
61
+ return version() if opts.version
62
+ return require './repl' if opts.interactive
63
+ return compileStdio() if opts.stdio
64
+ return compileScript null, sources[0] if opts.eval
65
+ return require './repl' unless sources.length
66
+ if opts.run
67
+ opts.literals = sources.splice(1).concat opts.literals
68
+ process.ARGV = process.argv = process.argv.slice(0, 2).concat opts.literals
69
+ compileScripts()
70
+
71
+ # Asynchronously read in each CoffeeScript in a list of source files and
72
+ # compile them. If a directory is passed, recursively compile all
73
+ # '.coffee' extension source files in it and all subdirectories.
74
+ compileScripts = ->
75
+ for source in sources
76
+ base = path.join(source)
77
+ compile = (source, topLevel) ->
78
+ path.exists source, (exists) ->
79
+ throw new Error "File not found: #{source}" unless exists
80
+ fs.stat source, (err, stats) ->
81
+ if stats.isDirectory()
82
+ fs.readdir source, (err, files) ->
83
+ for file in files
84
+ compile path.join(source, file)
85
+ else if topLevel or path.extname(source) is '.coffee'
86
+ fs.readFile source, (err, code) ->
87
+ if opts.join
88
+ contents[sources.indexOf source] = code.toString()
89
+ compileJoin() if helpers.compact(contents).length is sources.length
90
+ else
91
+ compileScript(source, code.toString(), base)
92
+ watch source, base if opts.watch and not opts.join
93
+ compile source, true
94
+
95
+ # Compile a single source script, containing the given code, according to the
96
+ # requested options. If evaluating the script directly sets `__filename`,
97
+ # `__dirname` and `module.filename` to be correct relative to the script's path.
98
+ compileScript = (file, input, base) ->
99
+ o = opts
100
+ options = compileOptions file
101
+ if o.require
102
+ require(if helpers.starts(req, '.') then fs.realpathSync(req) else req) for req in o.require
103
+ try
104
+ t = task = {file, input, options}
105
+ CoffeeScript.emit 'compile', task
106
+ if o.tokens then printTokens CoffeeScript.tokens t.input
107
+ else if o.nodes then printLine CoffeeScript.nodes(t.input).toString().trim()
108
+ else if o.run then CoffeeScript.run t.input, t.options
109
+ else
110
+ t.output = CoffeeScript.compile t.input, t.options
111
+ CoffeeScript.emit 'success', task
112
+ if o.print then printLine t.output.trim()
113
+ else if o.compile then writeJs t.file, t.output, base
114
+ else if o.lint then lint t.file, t.output
115
+ catch err
116
+ CoffeeScript.emit 'failure', err, task
117
+ return if CoffeeScript.listeners('failure').length
118
+ return printLine err.message if o.watch
119
+ printWarn err.stack
120
+ process.exit 1
121
+
122
+ # Attach the appropriate listeners to compile scripts incoming over **stdin**,
123
+ # and write them back to **stdout**.
124
+ compileStdio = ->
125
+ code = ''
126
+ stdin = process.openStdin()
127
+ stdin.on 'data', (buffer) ->
128
+ code += buffer.toString() if buffer
129
+ stdin.on 'end', ->
130
+ compileScript null, code
131
+
132
+ # After all of the source files are done being read, concatenate and compile
133
+ # them together.
134
+ compileJoin = ->
135
+ code = contents.join '\n'
136
+ compileScript "concatenation", code, "concatenation"
137
+
138
+ # Watch a source CoffeeScript file using `fs.watchFile`, recompiling it every
139
+ # time the file is updated. May be used in combination with other options,
140
+ # such as `--lint` or `--print`.
141
+ watch = (source, base) ->
142
+ fs.watchFile source, {persistent: true, interval: 500}, (curr, prev) ->
143
+ return if curr.size is prev.size and curr.mtime.getTime() is prev.mtime.getTime()
144
+ fs.readFile source, (err, code) ->
145
+ throw err if err
146
+ compileScript(source, code.toString(), base)
147
+
148
+ # Write out a JavaScript source file with the compiled code. By default, files
149
+ # are written out in `cwd` as `.js` files with the same name, but the output
150
+ # directory can be customized with `--output`.
151
+ writeJs = (source, js, base) ->
152
+ filename = path.basename(source, path.extname(source)) + '.js'
153
+ srcDir = path.dirname source
154
+ baseDir = if base is '.' then srcDir else srcDir.substring base.length
155
+ dir = if opts.output then path.join opts.output, baseDir else srcDir
156
+ jsPath = path.join dir, filename
157
+ compile = ->
158
+ js = ' ' if js.length <= 0
159
+ fs.writeFile jsPath, js, (err) ->
160
+ if err then printLine err.message
161
+ else if opts.compile and opts.watch then util.log "compiled #{source}"
162
+ path.exists dir, (exists) ->
163
+ if exists then compile() else exec "mkdir -p #{dir}", compile
164
+
165
+ # Pipe compiled JS through JSLint (requires a working `jsl` command), printing
166
+ # any errors or warnings that arise.
167
+ lint = (file, js) ->
168
+ printIt = (buffer) -> printLine file + ':\t' + buffer.toString().trim()
169
+ conf = __dirname + '/../extras/jsl.conf'
170
+ jsl = spawn 'jsl', ['-nologo', '-stdin', '-conf', conf]
171
+ jsl.stdout.on 'data', printIt
172
+ jsl.stderr.on 'data', printIt
173
+ jsl.stdin.write js
174
+ jsl.stdin.end()
175
+
176
+ # Pretty-print a stream of tokens.
177
+ printTokens = (tokens) ->
178
+ strings = for token in tokens
179
+ [tag, value] = [token[0], token[1].toString().replace(/\n/, '\\n')]
180
+ "[#{tag} #{value}]"
181
+ printLine strings.join(' ')
182
+
183
+ # Use the [OptionParser module](optparse.html) to extract all options from
184
+ # `process.argv` that are specified in `SWITCHES`.
185
+ parseOptions = ->
186
+ optionParser = new optparse.OptionParser SWITCHES, BANNER
187
+ o = opts = optionParser.parse process.argv.slice 2
188
+ o.compile or= !!o.output
189
+ o.run = not (o.compile or o.print or o.lint)
190
+ o.print = !! (o.print or (o.eval or o.stdio and o.compile))
191
+ sources = o.arguments
192
+
193
+ # The compile-time options to pass to the CoffeeScript compiler.
194
+ compileOptions = (fileName) -> {fileName, bare: opts.bare}
195
+
196
+ # Start up a new Node.js instance with the arguments in `--nodejs` passed to
197
+ # the `node` binary, preserving the other options.
198
+ forkNode = ->
199
+ nodeArgs = opts.nodejs.split /\s+/
200
+ args = process.argv[1..]
201
+ args.splice args.indexOf('--nodejs'), 2
202
+ spawn process.execPath, nodeArgs.concat(args),
203
+ cwd: process.cwd()
204
+ env: process.env
205
+ customFds: [0, 1, 2]
206
+
207
+ # Print the `--help` usage message and exit. Deprecated switches are not
208
+ # shown.
209
+ usage = ->
210
+ printLine (new optparse.OptionParser SWITCHES, BANNER).help()
211
+
212
+ # Print the `--version` message and exit.
213
+ version = ->
214
+ printLine "CoffeeScript version #{CoffeeScript.VERSION}"