-
Notifications
You must be signed in to change notification settings - Fork 1
/
cakeUtilities.coffee
98 lines (87 loc) · 3.09 KB
/
cakeUtilities.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File system support
fs = require 'fs'
# Manipulate platform-independent path strings
path = require 'path'
# Coffeescript-compiler for build chain
coffeeScript = require 'coffee-script'
# Recursively create folders
mkdirp = require 'mkdirp'
# Recursively process folders and files
readdirp = require 'readdirp'
# Support mixing .coffee and .js files in brickify-project
coffeeify = require 'coffeeify'
# Load yaml configuration into javascript file
browserifyData = require('browserify-data')
# Colorful logger for console
winston = require 'winston'
buildLog = winston.loggers.get('buildLog')
compileAllCoffeeFiles = (directory, afterCompileCallback) ->
buildLog.info "Compiling files from #{directory}"
readdirp root: directory, fileFilter: '*.coffee'
.on 'data', (entry) -> compileFile entry
.on 'error', (error) -> buildLog.error error
.on 'warn', (warning) -> buildLog.warn warning
.on 'end', -> afterCompileCallback(directory) if afterCompileCallback?
compileFile = (inputfileEntry) ->
inputfile = inputfileEntry.fullPath
buildLog.info " compile #{inputfile}"
compileObject = coffeeScript._compileFile inputfile, sourceMap = yes
outputfile = path.join inputfileEntry.fullParentDir,
path.basename(inputfile, '.coffee') + '.js'
fs.writeFile outputfile, compileObject.js, (error) ->
throw error if error
fs.writeFile outputfile + '.map', compileObject.v3SourceMap, (error) ->
throw error if error
deleteAllJsFiles = (directory, afterDeleteCallback) ->
buildLog.info "Clearing directory #{directory}..."
readdirp root: directory, fileFilter: ['*.js', '*.js.map']
.on 'data', (entry) -> fs.unlinkSync entry.fullPath
.on 'error', (error) -> buildLog.error error
.on 'warn', (warning) -> buildLog.warn warning
.on 'end', -> afterDeleteCallback(directory) if afterDeleteCallback?
module.exports.buildServer = (onlyDelete = false) ->
directories = [
path.join __dirname, '/src/server'
path.join __dirname, '/routes'
path.join __dirname, '/src/common'
]
for dir in directories
#build js in same directory as coffeescript to enable server debugging
deleteAllJsFiles dir, (directory) ->
compileAllCoffeeFiles(directory, null) if not onlyDelete
return module.exports
module.exports.linkHooks = ->
# The first 9 hooks are taken from `git init` which creates .sample files
# even though some of them are not listed in the
# [documentation](http://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks).
# The rest of the hooks are taken from the documentation.
[
'applypatch-msg'
'commit-msg'
'post-commit'
'post-receive'
'post-update'
'pre-applypatch'
'pre-commit'
'prepare-commit-msg'
'pre-rebase'
'update'
'post-rewrite'
'post-checkout'
'post-merge'
'pre-push'
'pre-auto-gc'
]
.forEach (hook) ->
hookPath = path.join('hooks', hook)
gitHookPath = path.join('.git/hooks', hook)
fs.unlink gitHookPath, (error) ->
if error and error.code is not 'ENOENT'
buildLog.error error
fs.link hookPath, gitHookPath, (error) ->
if error
if error.code is not 'ENOENT'
buildLog.error error
else
buildLog.info hookPath, '->', gitHookPath
return module.exports