1 | ninjaFactories = require './ninjaFactories'
|
2 | {findScript} = require './ninjaCommands'
|
3 | _ = require 'lodash'
|
4 | log = require('yadsil')('index')
|
5 | glob = require 'glob'
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | collectCoffeeFiles = ({extensions, paths}) ->
|
12 | log.info 'looking for coffee script files..'
|
13 | extensionMark = '$ext'
|
14 | _.chain(paths)
|
15 | .map((path) ->
|
16 | extensions.map (ext) -> path.replace extensionMark, ext
|
17 | )
|
18 | .flatten()
|
19 | .map((path) ->
|
20 | glob.sync path
|
21 | )
|
22 | .flatten()
|
23 | .value()
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | defaultLintOptions = {
|
29 | extensions: [
|
30 | 'coffee'
|
31 | '_coffee'
|
32 | ]
|
33 | paths: [
|
34 | 'src/**/*.$ext'
|
35 | 'assets/js/**/*.$ext'
|
36 | 'bin/**/*.$ext'
|
37 | 'Gruntfile.$ext'
|
38 | ]
|
39 | }
|
40 |
|
41 | setLintOptions = null
|
42 |
|
43 |
|
44 |
|
45 | exports.configureCoffeelint = (options) ->
|
46 | setLintOptions = options
|
47 |
|
48 |
|
49 |
|
50 | exports.getCoffeelintPaths = ->
|
51 | collectCoffeeFiles setLintOptions ? defaultLintOptions
|
52 |
|
53 |
|
54 | exports.defineFactory = ninjaFactories.defineFactory
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 | exports.defineBrowserifyFactory = (name, sourceFile, targetFile, options) ->
|
65 | exports.defineFactory "browserify-#{name}", {
|
66 | makeRules: (ninja, config) ->
|
67 | ['debug', 'release'].forEach (releaseType) ->
|
68 | cli = "$node #{findScript 'browserify-bundle.js'}"
|
69 | if options.extensions then cli += " --extensions '#{options.extensions.join ","}'"
|
70 | if options.transforms then cli += " --transforms '#{options.transforms.join ","}'"
|
71 | cli += " --out $out --i18n $out.i18n"
|
72 | if releaseType is 'debug'
|
73 | cli += " --deps $out.d --debug"
|
74 | cli += " ./$in"
|
75 |
|
76 | rule = ninja.rule("browserify-#{name}-#{releaseType}")
|
77 | rule.run(cli)
|
78 | if releaseType is 'debug' then rule.depfile('$out.d')
|
79 | rule.description "(#{releaseType}) BROWSERIFY $in"
|
80 |
|
81 | assetFiles: sourceFile
|
82 |
|
83 | makeAssetEdge: (ninja, source, target, releaseType) ->
|
84 | target = "build/assets/#{releaseType}/js/#{targetFile}"
|
85 | ninja.edge(target)
|
86 | .from(source)
|
87 | .using("browserify-#{name}-#{releaseType}")
|
88 | return [target]
|
89 | }
|