caffeine-mc
Version:
Select, configure and extend your to-JavaScript compiler, with arbitrary code, on a per file bases from within the file.
41 lines (36 loc) • 1.16 kB
text/coffeescript
{log, escapeRegExp, defineModule} = require 'art-standard-lib'
path = require 'path'
vm = require 'vm'
defineModule module, class Tools
@fileExtensions: ["caf", "caffeine"]
@fileIsCaffeine: (filename) -> /\.(caf|caffeine)$/.test filename
@runInContext: (js, context, filename) ->
if context == global
vm.runInThisContext js, filename
else
vm.runInContext js, context, filename
@evalInContext: (js, context) ->
try
(-> eval js).call context
catch e
console.error "<---> evalInContext: error: js:"
console.error js
console.error "<--->"
throw e
@displayError: (e, options = {}) ->
require 'colors'
return unless e
{verbose} = options
if verbose
log.error e
else if e.location? || e.sourceFile? # || e.message.match /parse|expect/i
log e.message.replace /<HERE>/, "<HERE>".red if e
else
log.error(
e.stack
.split "\n"
.slice 0, 30
.join "\n"
.replace new RegExp(escapeRegExp(process.cwd() + "/"), "g"), './'
.replace new RegExp(escapeRegExp(path.dirname(process.cwd()) + "/"), "g"), '../'
)