UNPKG

coffee-toaster

Version:

Minimalist manager and build system for CoffeeScript, an alternative for AMD's or CJS's OOP patterns, but with similar results. Made for those who dare to use class definitions in CoffeeScript while being able to easily inherit from external files. Powered with imports directives that use wildcards facilities, exposed scopes and excluded files filter options. The system can even use folders-as-namespaces to help you avoid naming collisions in architecture.

114 lines (90 loc) 3.07 kB
class Toast # requires fs = require "fs" path = require "path" pn = path.normalize exec = (require "child_process").exec colors = require 'colors' cs = require "coffee-script" # variables builders: [] constructor: (@toaster) -> # basepath @basepath = @toaster.basepath if (config = @toaster.cli.argv["config"])? config = JSON.parse( config ) unless config instanceof Object @toast item for item in ( [].concat config ) else config_file = @toaster.cli.argv["config-file"] filepath = config_file || pn "#{@basepath}/toaster.coffee" if fs.existsSync filepath contents = fs.readFileSync filepath, "utf-8" try code = cs.compile contents, {bare:1} fix_scope = /(^[\s\t]?)(toast)+(\()/mg code = code.replace fix_scope, "$1this.$2$3" eval code catch err error err.message + " at 'toaster.coffee' config file." else error "File not found: ".yellow + " #{filepath.red}\n" + "Try running:".yellow + " toaster -i".green + " or type".yellow + " #{'toaster -h'.green} " + "for more info".yellow toast:( srcpath, params = {} )=> if srcpath instanceof Object params = srcpath else if srcpath.substr( 0, 1 ) != "/" srcpath = "#{@toaster.basepath}/#{srcpath}" if params.release is null error 'Release path not informed in config.' return process.exit() else path = ( (params.release.split '/').slice 0, -1 ).join '/' unless fs.existsSync "#{@basepath}/#{path}" error "Release folder does not exist:\n\t#{path.yellow}" return process.exit() # configuration object shared between builders debug = if params.debug then pn "#{@basepath}/#{params.debug}" else null config = # RUNNING BUILDERS is_building: false # BASEPATH basepath: @basepath # SRC FOLDERS src_folders: [] # FILES CONTRAINER ARRAY files: [] # VENDORS vendors: params.vendors ? [] # OPTIONS exclude: params.exclude ? [] bare: params.bare ? false packaging: params.packaging ? true expose: params.expose ? null minify: params.minify ? true # HTTP FOLDER / RELEASE / DEBUG httpfolder: params.httpfolder ? "" release: pn "#{@basepath}/#{params.release}" debug: debug # compute vendors full path for v, i in config.vendors if (v.substr 0, 1) != "/" config.vendors[i] = pn "#{@basepath}/#{v}" unless srcpath instanceof Object config.src_folders.push { path: srcpath, alias: params.alias || null } if params.folders? for folder, alias of params.folders if folder.substr 0, 1 is not "/" folder = pn "#{@basepath}/#{folder}/" config.src_folders.push {path: folder, alias: alias} for item in config.src_folders unless fs.existsSync item.path error "Source folder doens't exist:\n\t#{item.path.red}\n" + "Check your #{'toaster.coffee'.yellow} and try again." + "\n\t" + pn( "#{@basepath}/toaster.coffee" ).yellow return process.exit() @builders.push new toaster.core.Builder @toaster, @toaster.cli, config