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.
- data/.gitignore +2 -0
- data/.gitmodules +6 -0
- data/bin/spadepkg +8 -0
- data/lib/libgems_ext.rb +8 -0
- data/lib/libgems_ext/config_file.rb +33 -0
- data/lib/libgems_ext/dependency_installer.rb +150 -0
- data/lib/libgems_ext/installer.rb +39 -0
- data/lib/libgems_ext/libgems.rb +39 -0
- data/lib/libgems_ext/spec_fetcher.rb +11 -0
- data/lib/spade-packager.rb +1 -0
- data/lib/spade/packager.rb +18 -0
- data/lib/spade/packager/cli.rb +9 -0
- data/lib/spade/packager/cli/base.rb +196 -0
- data/lib/spade/packager/cli/owner.rb +46 -0
- data/lib/spade/packager/cli/project_generator.rb +117 -0
- data/lib/spade/packager/credentials.rb +38 -0
- data/lib/spade/packager/local.rb +50 -0
- data/lib/spade/packager/package.rb +160 -0
- data/lib/spade/packager/remote.rb +98 -0
- data/lib/spade/packager/repository.rb +18 -0
- data/lib/spade/packager/version.rb +5 -0
- data/packages/coffee-script/.gitignore +8 -0
- data/packages/coffee-script/.npmignore +11 -0
- data/packages/coffee-script/Cakefile +229 -0
- data/packages/coffee-script/LICENSE +22 -0
- data/packages/coffee-script/README +47 -0
- data/packages/coffee-script/Rakefile +78 -0
- data/packages/coffee-script/bin/cake +7 -0
- data/packages/coffee-script/bin/coffee +7 -0
- data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
- data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
- data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
- data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
- data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
- data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
- data/packages/coffee-script/documentation/css/docs.css +374 -0
- data/packages/coffee-script/documentation/css/idle.css +64 -0
- data/packages/coffee-script/documentation/docs/browser.html +25 -0
- data/packages/coffee-script/documentation/docs/cake.html +43 -0
- data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
- data/packages/coffee-script/documentation/docs/command.html +161 -0
- data/packages/coffee-script/documentation/docs/docco.css +186 -0
- data/packages/coffee-script/documentation/docs/grammar.html +399 -0
- data/packages/coffee-script/documentation/docs/helpers.html +31 -0
- data/packages/coffee-script/documentation/docs/index.html +3 -0
- data/packages/coffee-script/documentation/docs/lexer.html +490 -0
- data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
- data/packages/coffee-script/documentation/docs/optparse.html +78 -0
- data/packages/coffee-script/documentation/docs/repl.html +24 -0
- data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
- data/packages/coffee-script/documentation/docs/scope.html +54 -0
- data/packages/coffee-script/documentation/docs/underscore.html +295 -0
- data/packages/coffee-script/documentation/images/background.png +0 -0
- data/packages/coffee-script/documentation/images/banding.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
- data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
- data/packages/coffee-script/documentation/images/favicon.ico +0 -0
- data/packages/coffee-script/documentation/images/logo.png +0 -0
- data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
- data/packages/coffee-script/documentation/index.html.erb +1607 -0
- data/packages/coffee-script/documentation/js/aliases.js +17 -0
- data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
- data/packages/coffee-script/documentation/js/block_comment.js +4 -0
- data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
- data/packages/coffee-script/documentation/js/classes.js +44 -0
- data/packages/coffee-script/documentation/js/comparisons.js +3 -0
- data/packages/coffee-script/documentation/js/conditionals.js +12 -0
- data/packages/coffee-script/documentation/js/default_args.js +7 -0
- data/packages/coffee-script/documentation/js/do.js +10 -0
- data/packages/coffee-script/documentation/js/embedded.js +4 -0
- data/packages/coffee-script/documentation/js/existence.js +6 -0
- data/packages/coffee-script/documentation/js/expressions.js +15 -0
- data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
- data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
- data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
- data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
- data/packages/coffee-script/documentation/js/functions.js +7 -0
- data/packages/coffee-script/documentation/js/heredocs.js +2 -0
- data/packages/coffee-script/documentation/js/heregexes.js +2 -0
- data/packages/coffee-script/documentation/js/interpolation.js +4 -0
- data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
- data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
- data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
- data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
- data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
- data/packages/coffee-script/documentation/js/overview.js +35 -0
- data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
- data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
- data/packages/coffee-script/documentation/js/prototypes.js +3 -0
- data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
- data/packages/coffee-script/documentation/js/scope.js +8 -0
- data/packages/coffee-script/documentation/js/slices.js +4 -0
- data/packages/coffee-script/documentation/js/soaks.js +2 -0
- data/packages/coffee-script/documentation/js/splats.js +15 -0
- data/packages/coffee-script/documentation/js/splices.js +3 -0
- data/packages/coffee-script/documentation/js/strings.js +2 -0
- data/packages/coffee-script/documentation/js/switch.js +23 -0
- data/packages/coffee-script/documentation/js/try.js +8 -0
- data/packages/coffee-script/documentation/js/while.js +18 -0
- data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
- data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
- data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
- data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
- data/packages/coffee-script/examples/blocks.coffee +54 -0
- data/packages/coffee-script/examples/code.coffee +167 -0
- data/packages/coffee-script/examples/computer_science/README +4 -0
- data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
- data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
- data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
- data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
- data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
- data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
- data/packages/coffee-script/examples/poignant.coffee +181 -0
- data/packages/coffee-script/examples/potion.coffee +206 -0
- data/packages/coffee-script/examples/underscore.coffee +682 -0
- data/packages/coffee-script/examples/web_server.coffee +12 -0
- data/packages/coffee-script/extras/EXTRAS +7 -0
- data/packages/coffee-script/extras/coffee-script.js +8 -0
- data/packages/coffee-script/extras/jsl.conf +44 -0
- data/packages/coffee-script/index.html +2515 -0
- data/packages/coffee-script/lib/browser.js +52 -0
- data/packages/coffee-script/lib/cake.js +76 -0
- data/packages/coffee-script/lib/coffee-script.js +82 -0
- data/packages/coffee-script/lib/command.js +263 -0
- data/packages/coffee-script/lib/grammar.js +581 -0
- data/packages/coffee-script/lib/helpers.js +66 -0
- data/packages/coffee-script/lib/index.js +8 -0
- data/packages/coffee-script/lib/lexer.js +633 -0
- data/packages/coffee-script/lib/nodes.js +2165 -0
- data/packages/coffee-script/lib/optparse.js +111 -0
- data/packages/coffee-script/lib/parser.js +649 -0
- data/packages/coffee-script/lib/repl.js +42 -0
- data/packages/coffee-script/lib/rewriter.js +353 -0
- data/packages/coffee-script/lib/scope.js +120 -0
- data/packages/coffee-script/lib/spade-format.js +45 -0
- data/packages/coffee-script/package.json +26 -0
- data/packages/coffee-script/src/browser.coffee +43 -0
- data/packages/coffee-script/src/cake.coffee +69 -0
- data/packages/coffee-script/src/coffee-script.coffee +92 -0
- data/packages/coffee-script/src/command.coffee +214 -0
- data/packages/coffee-script/src/grammar.coffee +590 -0
- data/packages/coffee-script/src/helpers.coffee +56 -0
- data/packages/coffee-script/src/index.coffee +2 -0
- data/packages/coffee-script/src/lexer.coffee +653 -0
- data/packages/coffee-script/src/nodes.coffee +1754 -0
- data/packages/coffee-script/src/optparse.coffee +99 -0
- data/packages/coffee-script/src/repl.coffee +42 -0
- data/packages/coffee-script/src/rewriter.coffee +326 -0
- data/packages/coffee-script/src/scope.coffee +94 -0
- data/packages/coffee-script/test/arguments.coffee +127 -0
- data/packages/coffee-script/test/assignment.coffee +98 -0
- data/packages/coffee-script/test/break.coffee +18 -0
- data/packages/coffee-script/test/comments.coffee +201 -0
- data/packages/coffee-script/test/conditionals.coffee +181 -0
- data/packages/coffee-script/test/exception_handling.coffee +90 -0
- data/packages/coffee-script/test/helpers.coffee +96 -0
- data/packages/coffee-script/test/importing.coffee +18 -0
- data/packages/coffee-script/test/operators.coffee +225 -0
- data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
- data/packages/coffee-script/test/regular_expressions.coffee +56 -0
- data/packages/coffee-script/test/test.html +123 -0
- data/packages/coffee-script/test/test_chaining.coffee +77 -0
- data/packages/coffee-script/test/test_classes.coffee +372 -0
- data/packages/coffee-script/test/test_compilation.coffee +26 -0
- data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
- data/packages/coffee-script/test/test_existence.coffee +165 -0
- data/packages/coffee-script/test/test_functions.coffee +379 -0
- data/packages/coffee-script/test/test_heredocs.coffee +111 -0
- data/packages/coffee-script/test/test_literals.coffee +270 -0
- data/packages/coffee-script/test/test_option_parser.coffee +27 -0
- data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
- data/packages/coffee-script/test/test_returns.coffee +63 -0
- data/packages/coffee-script/test/test_splats.coffee +102 -0
- data/packages/coffee-script/test/test_strings.coffee +118 -0
- data/packages/coffee-script/test/test_switch.coffee +103 -0
- data/packages/coffee-script/test/test_while.coffee +71 -0
- data/packages/ivory/LICENSE.txt +1 -0
- data/packages/ivory/README.md +19 -0
- data/packages/ivory/lib/buffer.js +111 -0
- data/packages/ivory/lib/events.js +137 -0
- data/packages/ivory/lib/fs.js +266 -0
- data/packages/ivory/lib/main.js +13 -0
- data/packages/ivory/lib/path.js +158 -0
- data/packages/ivory/lib/ruby/buffer.rb +145 -0
- data/packages/ivory/lib/ruby/constants.rb +585 -0
- data/packages/ivory/lib/ruby/events.rb +32 -0
- data/packages/ivory/lib/ruby/fs.rb +245 -0
- data/packages/ivory/lib/ruby/process.rb +28 -0
- data/packages/ivory/lib/stream.js +115 -0
- data/packages/ivory/lib/util.js +414 -0
- data/packages/ivory/package.json +11 -0
- data/packages/ivory/spade-boot.js +78 -0
- data/packages/jquery/main.js +7179 -0
- data/packages/jquery/package.json +10 -0
- data/packages/json/lib/main.js +14 -0
- data/packages/json/package.json +8 -0
- data/packages/lproj/README.md +77 -0
- data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
- data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
- data/packages/lproj/examples/demo-app/index.html +8 -0
- data/packages/lproj/examples/demo-app/lib/main.js +7 -0
- data/packages/lproj/examples/demo-app/package.json +9 -0
- data/packages/lproj/lib/main.js +78 -0
- data/packages/lproj/lib/strings-format.js +6 -0
- data/packages/lproj/package.json +9 -0
- data/packages/optparse/README.md +161 -0
- data/packages/optparse/TODO +1 -0
- data/packages/optparse/examples/browser-test.html +75 -0
- data/packages/optparse/examples/nodejs-test.js +90 -0
- data/packages/optparse/lib/optparse.js +309 -0
- data/packages/optparse/package.json +13 -0
- data/packages/optparse/seed.yml +5 -0
- data/packages/text/lib/main.js +8 -0
- data/packages/text/package.json +9 -0
- data/packages/web-file/README.md +7 -0
- data/packages/web-file/lib/errors.js +32 -0
- data/packages/web-file/lib/file-reader.js +10 -0
- data/packages/web-file/lib/file-system.js +234 -0
- data/packages/web-file/lib/file-writer.js +10 -0
- data/packages/web-file/lib/file.js +9 -0
- data/packages/web-file/lib/main.js +34 -0
- data/packages/web-file/lib/platform.js +25 -0
- data/packages/web-file/lib/ruby/file.rb +252 -0
- data/packages/web-file/lib/ruby/file_reader.rb +69 -0
- data/packages/web-file/lib/ruby/file_system.rb +134 -0
- data/packages/web-file/lib/ruby/file_writer.rb +78 -0
- data/packages/web-file/package.json +12 -0
- data/packages/web-typed-array/README.md +7 -0
- data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
- data/packages/web-typed-array/lib/array-buffer.js +7 -0
- data/packages/web-typed-array/lib/main.js +33 -0
- data/packages/web-typed-array/lib/platform.js +20 -0
- data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
- data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
- data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
- data/packages/web-typed-array/lib/typed-array.js +26 -0
- data/packages/web-typed-array/package.json +9 -0
- data/spade-packager.gemspec +39 -0
- data/spec/cli/build_spec.rb +57 -0
- data/spec/cli/install_spec.rb +119 -0
- data/spec/cli/installed_spec.rb +55 -0
- data/spec/cli/list_spec.rb +74 -0
- data/spec/cli/login_spec.rb +75 -0
- data/spec/cli/new_spec.rb +5 -0
- data/spec/cli/owner_spec.rb +114 -0
- data/spec/cli/push_spec.rb +73 -0
- data/spec/cli/uninstall_spec.rb +58 -0
- data/spec/cli/unpack_spec.rb +72 -0
- data/spec/cli/unyank_spec.rb +73 -0
- data/spec/cli/yank_spec.rb +73 -0
- data/spec/credentials_spec.rb +23 -0
- data/spec/fixtures/badrake-0.8.7.spd +0 -0
- data/spec/fixtures/builder-3.0.0.spd +0 -0
- data/spec/fixtures/bundler-1.1.pre.spd +0 -0
- data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
- data/spec/fixtures/core-test-0.4.3.spd +0 -0
- data/spec/fixtures/core-test/bin/cot +3 -0
- data/spec/fixtures/core-test/lib/main.js +1 -0
- data/spec/fixtures/core-test/resources/runner.css +0 -0
- data/spec/fixtures/core-test/tests/test.js +1 -0
- data/spec/fixtures/highline-1.6.1.spd +0 -0
- data/spec/fixtures/ivory-0.0.1.spd +0 -0
- data/spec/fixtures/jquery-1.4.3.spd +0 -0
- data/spec/fixtures/optparse-1.0.1.spd +0 -0
- data/spec/fixtures/package.json +30 -0
- data/spec/fixtures/rake-0.8.6.spd +0 -0
- data/spec/fixtures/rake-0.8.7.spd +0 -0
- data/spec/gauntlet_spec.rb +27 -0
- data/spec/package_spec.rb +267 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/cli.rb +103 -0
- data/spec/support/fake.rb +48 -0
- data/spec/support/fake_gem_server.rb +67 -0
- data/spec/support/fake_gemcutter.rb +50 -0
- data/spec/support/matchers.rb +32 -0
- data/spec/support/path.rb +61 -0
- data/templates/project/LICENSE +19 -0
- data/templates/project/README.md +21 -0
- data/templates/project/lib/main.js +9 -0
- data/templates/project/project.json +31 -0
- data/templates/project/tests/main-test.js +8 -0
- 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}"
|