-
Notifications
You must be signed in to change notification settings - Fork 23
/
toaster.coffee
78 lines (62 loc) · 2.41 KB
/
toaster.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
exports.run=()-> new Toaster
#<< toaster/toast
#<< toaster/cli
#<< toaster/misc/inject-ns
exports.toaster = toaster
exports.Toaster = class Toaster
# requirements
fs = require "fs"
fsu = require "fs-util"
path = require "path"
exec = (require "child_process").exec
colors = require 'colors'
# variable - before filter container
before_build: null
constructor:( basedir, options = null, skip_initial_build = false )->
@basepath = path.resolve( basedir || "." )
@cli = new toaster.Cli options
# increments basepath if some path is given for args -n, -i, -c, -w, -d
# just one of these could have a path, so only the first found will be
# considered.
for flag in ('nicwd'.split '')
if (typeof (base = @cli.argv[flag]) is 'string')
@basepath = path.resolve base
break
# injecting options into @cli.argv to maintain interoperability
if options?
@cli.argv[k] = v for k, v of options
# printing version
if @cli.argv.v
filepath = path.join __dirname, "/../package.json"
contents = fs.readFileSync filepath, "utf-8"
schema = JSON.parse contents
return log schema.version
# scaffolding basic structure for new projects
else if @cli.argv.n
new toaster.generators.Project( @basepath ).create @cli.argv.n
# initializing a toaster file template into an existent project
else if @cli.argv.i
new toaster.generators.Config( @basepath ).create()
# injecting namespace declarations
else if @cli.argv.ns
@toast = new toaster.Toast @
new toaster.misc.InjectNS @toast.builders
# starting watching'n'compiling process
else if (base = @cli.argv.w || @cli.argv.c || @cli.argv.a)
config = if options and options.config then options.config else null
@toast = new toaster.Toast @
@build() unless skip_initial_build
# showing help screen
else
return log @cli.opts.help()
# can be called by apps using toaster as lib, build the project with options
# to inject header and footer code which must to be in coffee as well and
# will be compiled together the app.
build:( header_code = "", footer_code = "" )->
for builder in @toast.builders
builder.build header_code, footer_code
# resets the toaster completely - specially used when the `toaster.coffee`
# config file is edited :)
reset:()->
builder.reset() for builder in @toast.builders
exports.run()