diff --git a/packages/coffeescript/coffeescript_tests.js b/packages/coffeescript/coffeescript_tests.js index 6baa3ca189..dad72f95fa 100644 --- a/packages/coffeescript/coffeescript_tests.js +++ b/packages/coffeescript/coffeescript_tests.js @@ -3,9 +3,10 @@ Tinytest.add("coffeescript - presence", function(test) { }); Tinytest.add("literate coffeescript - presence", function(test) { test.isTrue(Meteor.__LITCOFFEESCRIPT_PRESENT); + test.isTrue(Meteor.__COFFEEMDSCRIPT_PRESENT); }); Tinytest.add("coffeescript - exported variable", function(test) { test.equal(COFFEESCRIPT_EXPORTED, 123); test.equal(Package['coffeescript-test-helper'].COFFEESCRIPT_EXPORTED, 123); -}); +}); \ No newline at end of file diff --git a/packages/coffeescript/package.js b/packages/coffeescript/package.js index 2a13f962fb..e31e47b9db 100644 --- a/packages/coffeescript/package.js +++ b/packages/coffeescript/package.js @@ -16,9 +16,10 @@ Package.on_test(function (api) { api.use(['coffeescript-test-helper'], ['client', 'server']); api.add_files([ 'coffeescript_test_setup.js', - 'coffeescript_tests.coffee', - 'coffeescript_strict_tests.coffee', - 'litcoffeescript_tests.litcoffee', + 'tests/coffeescript_tests.coffee', + 'tests/coffeescript_strict_tests.coffee', + 'tests/litcoffeescript_tests.litcoffee', + 'tests/litcoffeescript_tests.coffee.md', 'coffeescript_tests.js' ], ['client', 'server']); }); diff --git a/packages/coffeescript/plugin/compile-coffeescript.js b/packages/coffeescript/plugin/compile-coffeescript.js index 3270a2912e..b0c94ce870 100644 --- a/packages/coffeescript/plugin/compile-coffeescript.js +++ b/packages/coffeescript/plugin/compile-coffeescript.js @@ -113,13 +113,14 @@ var addSharedHeader = function (source, sourceMap) { }; }; -var handler = function (compileStep) { +var handler = function (compileStep, isLiterate) { var source = compileStep.read().toString('utf8'); var outputFile = compileStep.inputPath + ".js"; + var options = { bare: true, filename: compileStep.inputPath, - literate: path.extname(compileStep.inputPath) === '.litcoffee', + literate: !!isLiterate, // Return a source map. sourceMap: true, // Include the original source in the source map (sourcesContent field). @@ -152,6 +153,11 @@ var handler = function (compileStep) { }); }; -Plugin.registerSourceHandler("coffee", handler); -Plugin.registerSourceHandler("litcoffee", handler); +var literateHandler = function (compileStep) { + return handler(compileStep, true); +} + +Plugin.registerSourceHandler("coffee", handler); +Plugin.registerSourceHandler("litcoffee", literateHandler); +Plugin.registerSourceHandler("coffee.md", literateHandler); diff --git a/packages/coffeescript/coffeescript_strict_tests.coffee b/packages/coffeescript/tests/coffeescript_strict_tests.coffee similarity index 100% rename from packages/coffeescript/coffeescript_strict_tests.coffee rename to packages/coffeescript/tests/coffeescript_strict_tests.coffee diff --git a/packages/coffeescript/coffeescript_tests.coffee b/packages/coffeescript/tests/coffeescript_tests.coffee similarity index 100% rename from packages/coffeescript/coffeescript_tests.coffee rename to packages/coffeescript/tests/coffeescript_tests.coffee diff --git a/packages/coffeescript/tests/litcoffeescript_tests.coffee.md b/packages/coffeescript/tests/litcoffeescript_tests.coffee.md new file mode 100644 index 0000000000..e68b845a96 --- /dev/null +++ b/packages/coffeescript/tests/litcoffeescript_tests.coffee.md @@ -0,0 +1,6 @@ +This file is just the same as `coffeescript_tests.coffee`, first we set a +property, which we check for in `coffeescript_tests.js`, and then a trivial +testcase. + + Meteor.__COFFEEMDSCRIPT_PRESENT = true + Tinytest.add "markdown coffeescript - compile", (test) -> test.isTrue true diff --git a/packages/coffeescript/litcoffeescript_tests.litcoffee b/packages/coffeescript/tests/litcoffeescript_tests.litcoffee similarity index 100% rename from packages/coffeescript/litcoffeescript_tests.litcoffee rename to packages/coffeescript/tests/litcoffeescript_tests.litcoffee diff --git a/tools/packages.js b/tools/packages.js index 09290ac63d..41832c04fd 100644 --- a/tools/packages.js +++ b/tools/packages.js @@ -236,8 +236,8 @@ _.extend(Slice.prototype, { var relPath = source.relPath; var fileOptions = _.clone(source.fileOptions) || {}; var absPath = path.resolve(self.pkg.sourceRoot, relPath); - var ext = path.extname(relPath).substr(1); - var handler = !fileOptions.isAsset && self._getSourceHandler(ext); + var filename = path.basename(relPath); + var handler = !fileOptions.isAsset && self._getSourceHandler(filename); var contents = watch.readAndWatchFile(self.watchSet, absPath); if (contents === null) { @@ -723,12 +723,17 @@ _.extend(Slice.prototype, { // Find the function that should be used to handle a source file for // this slice, or return null if there isn't one. We'll use handlers - // that are defined in this package and in its immediate - // dependencies. ('extension' should be the extension of the file - // without a leading dot.) - _getSourceHandler: function (extension) { + // that are defined in this package and in its immediate dependencies. + _getSourceHandler: function (filename) { var self = this; - return (self._allHandlers())[extension] || null; + var handlers = self._allHandlers(); + var parts = filename.split('.'); + for (var i = 0; i < parts.length; i++) { + var extension = parts.slice(i).join('.'); + if (_.has(handlers, extension)) + return handlers[extension]; + } + return null; } }); @@ -946,7 +951,8 @@ _.extend(Package.prototype, { return; var Plugin = { - // 'extension' is a file extension without a dot (eg 'js', 'coffee') + // 'extension' is a file extension without the separation dot + // (eg 'js', 'coffee', 'coffee.md') // // 'handler' is a function that takes a single argument, a // CompileStep (#CompileStep)