-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgulpfile.ls
More file actions
89 lines (77 loc) · 2.65 KB
/
gulpfile.ls
File metadata and controls
89 lines (77 loc) · 2.65 KB
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
async = require \async
browserify = require \browserify
cheerio = require \cheerio
{browserify-debug-mode} = require \./config
fs = require \fs
gulp = require \gulp
gulp-browserify = require \gulp-browserify
gulp-livescript = require \gulp-livescript
nodemon = require \gulp-nodemon
stylus = require \gulp-stylus
{basename, dirname, extname} = require \path
{filter, flatten, each, map, Str} = require \prelude-ls
source = require \vinyl-source-stream
watchify = require \watchify
get-html-files = (directory, callback)->
(err, files) <- fs.readdir directory
return callback err, null if !!err
callback null, (files
|> filter -> (extname it) == \.html
|> map -> "#{directory}/#{it}"
)
get-scripts-to-browserify = (html-files, callback)->
(err, results) <- async.map do
html-files
(file, callback)->
(err, data) <- fs.read-file file
return callback err, null if !!err
$ = cheerio.load "#{data}"
callback null, ($ "script[src]"
|> map -> $ it .attr \src
|> filter -> !!it and it.trim!.length > 0
)
return callback err, null if !!err
callback null, (results |> flatten |> filter -> !!it)
watch-entries = (entries, callback)->
(err) <- async.each-series do
entries
({directory, file}, callback)->
b = browserify watchify.args <<< {debug: browserify-debug-mode}
b.add "#{directory}/#{file}.ls"
b.transform \liveify
b.transform \cssify
w = watchify b
bundle = ->
w.bundle!
.on \error, -> console.log arguments
.pipe source "#{file}.js"
.pipe gulp.dest directory
w.on \update, bundle
bundle!
callback null
return callback err if !!err
callback null
gulp.task \compilation, ->
gulp.src 'public/styles/*.styl'
.pipe stylus!
.pipe gulp.dest 'public/styles/'
gulp.task \watch, ->
gulp.watch <[public/styles/*.styl]>, ['compilation']
(err, html-files) <- get-html-files \./public/
return console.log err if !!err
(err, scripts) <- get-scripts-to-browserify html-files
return console.log err if !!err
entries = scripts |> map -> {
directory: ".#{dirname it}"
file: (basename it).replace (extname it), ""
}
(err) <- watch-entries entries
return console.log err if !!err
gulp.task \develop, ->
nodemon {
exec-map: ls: \lsc
ext: \ls
ignore: <[public/*]>
script: \./server.ls
}
gulp.task \default, <[compilation watch develop]>