This repository has been archived by the owner on Sep 14, 2023. It is now read-only.
/
build.coffee
115 lines (81 loc) · 2.17 KB
/
build.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
amdify = require "amdify"
at = amdify.transformers
async = require "async"
stepc = require "stepc"
outcome = require "outcome"
fs = require "fs"
path = require "path"
dref = require "dref"
module.exports = class
###
###
constructor: (@ops, packageManagers) ->
@_jam = packageManagers.packageManagers.jam
@_directory = process.cwd()
@_prefix = (dref.get(ops.pkg, "jam.packageDir") or "jam");
baseDir = dref.get(ops.pkg, "jam.baseUrl") or ""
@_output = @_directory + "/" + @_prefix
@_prefix = @_prefix.replace(new RegExp("^#{baseDir}"), "")
@_baseDir = @_directory + "/" + baseDir
###
###
run: (callback) ->
o = outcome.e callback
dir = @_directory + "/node_modules"
output = @_output
self = @
stepc.async(
(() ->
fs.readdir dir, @
),
(o.s (dirs) ->
this null, self._fixDirs(dir, dirs)
),
(o.s (dirs) ->
this.dirs = dirs
self._amdifyAll dirs, this
),
(o.s () ->
self._fixPackage this.dirs, this
),
(o.s () ->
self._jam.rebuild @
),
callback
)
###
###
_fixPackage: (dirs, next) ->
return next()
d = {}
dirs.map (dir) =>
bn = path.basename(dir)
d[bn] = path.join(@_prefix, bn, require.resolve(dir).replace(dir, "").replace(".js", ""))
dref.set @ops.pkg, "jam.config.paths", d
pkgPath = path.join(@ops.dir, "package.json")
fs.writeFile pkgPath, JSON.stringify(@ops.pkg, null, 2), next
###
###
_fixDirs: (base, dirs) ->
dirs.map((d) ->
base + "/" + d
).filter (d) ->
path.basename(d).substr(0,1) isnt "." and fs.lstatSync(d).isDirectory()
###
###
_amdifyAll: (dirs, callback) ->
async.map dirs, ((dir, callback) =>
@_amdify dir, (err) ->
callback()
), callback
###
###
_amdify: (dir, callback) ->
amdify {
entry: require.resolve(dir),
prefix: ""
}, outcome.e(callback).s (bundle) =>
#console.log @_output, @_prefix
transformer = new at.Template("amd")
transformer = new at.Copy({ output: @_output }, transformer)
bundle.transform(transformer, callback)