Skip to content

Instantly share code, notes, and snippets.

@markmarijnissen
Created June 18, 2014 09:53
Show Gist options
  • Save markmarijnissen/ccb024f1ddcda9497aed to your computer and use it in GitHub Desktop.
Save markmarijnissen/ccb024f1ddcda9497aed to your computer and use it in GitHub Desktop.
Brunch.io: Easier file definition
exports.config = require('./easy-config.coffee').config({
src:
input:
"lib": [
"libs/jquery.min.js"
# ..etc ...
]
"app": [
"src/app/main.js"
/^src\/app/
]
"admin": [
"src/admin/main.js"
/^src\/admin/
]
output: {
"lib":
"admin/admin.lib.css" : "stylesheets"
"app/app.lib.css" : "stylesheets"
"admin/admin.lib.js" : "javascripts"
"app/app.lib.js" : "javascripts"
"app":
"app/app.src.js" : "javascripts"
"app/app.src.css" : "stylesheets"
"app/app.views.js" : "templates"
"admin":
"admin/admin.src.js" : "javascripts"
"admin/admin.src.css" : "stylesheets"
"admin/admin.views.js" : "templates"
}
})
# filter takes an array of strings or regexes
filter = (tests) ->
(file) ->
for test in tests
if test.test? and test.test(file) then return true
if test is file then return true
return false
# converts {input: ..., output:...} to brunch-config
makeFiles = (src) ->
src = {} unless src?
src.input = {} unless src.input?
src.output = {} unless src.output?
# create order
order = []
for group,files of src.input
order = order.concat(files)
# output
result =
javascripts:
joinTo: {}
order: before: order
#dependOn: src.dependsOn?.javascripts
stylesheets:
joinTo: {}
order: before: order
#dependOn: src.dependsOn?.stylesheets
templates:
joinTo: {}
order: before: order
#dependOn: src.dependsOn?.templates
for group,files of src.input
for dest,target of src.output[group]
if not result[target]
console.error('Invalid target',target)
else
result[target].joinTo[dest] = filter(files)
result
exports.config = (config) ->
result = config or {}
result.files = makeFiles(config.src)
result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment