/
config-dist-and-src.coffee
163 lines (137 loc) · 3.75 KB
/
config-dist-and-src.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
module.exports = (config, options) ->
path = require 'path'
log = require "#{config.req.helpers}/log"
# defaults
# ========
dir =
dist: 'dist'
src: 'src'
client: 'client'
images: 'images'
bower: 'bower_components'
libs: 'libs'
server: 'server'
scripts: 'scripts'
styles: 'styles'
views: 'views'
file =
appServer: 'routes' # app server dist entry file
rbServer: 'server' # rb server dist bootstrap file
# dirs
# ====
getDirs = (loc, isApp) ->
o = {}
switch loc
when 'dist'
o.dir = options[loc].dir
o.clientDir = options[loc].client.dir
o.serverDir = options[loc].server.dir
when 'src'
o.clientDir = options[loc].client.dir if isApp
if isApp
o.clientBower = options[loc].client.bower.dir
o.clientImages = options[loc].client.images.dir
o.clientLibs = options[loc].client.libs.dir
o.clientScripts = options[loc].client.scripts.dir
o.clientStyles = options[loc].client.styles.dir
o.clientViews = options[loc].client.views.dir
dir: o.dir or dir[loc]
client:
dir: o.clientDir or dir.client
bower:
dir: o.clientBower or dir.bower
images:
dir: o.clientImages or dir.images
libs:
dir: o.clientLibs or dir.libs
scripts:
dir: o.clientScripts or dir.scripts
styles:
dir: o.clientStyles or dir.styles
views:
dir: o.clientViews or dir.views
server:
dir: o.serverDir or dir.server # gets deleted, see removeServerDir
scripts:
dir: o.serverDir or dir.scripts
# dist
# ====
config.dist = {}
config.dist.dir = options.dist.dir or dir.dist # only one dist.dir
config.dist.rb = getDirs 'dist'
config.dist.app = getDirs 'dist', true
# src
# ===
config.src = {}
config.src.rb = getDirs 'src'
config.src.app = getDirs 'src', true
# format config
# =============
formatConfig = (loc, src) ->
cwd = ''
isSrc = loc is 'src'
isDist = loc is 'dist'
if isSrc
cwd = config.rb.dir if src is 'rb'
cwd = config.app.dir if src is 'app'
loc = config[loc][src]
for own k1, v1 of loc
if k1 is 'dir'
loc.dir = path.join cwd, v1
continue
for own k2, v2 of v1
if k2 is 'dir'
if isDist and src is 'rb'
v1.dir = path.join loc.dir, v2, config.rb.prefix.distDir
else
v1.dir = path.join loc.dir, v2
else
v1[k2].dir = path.join v1.dir, v2.dir
formatConfig 'dist', 'rb'
formatConfig 'dist', 'app'
formatConfig 'src', 'rb'
formatConfig 'src', 'app'
# add dirName
# ===========
addDirName = (loc) ->
for own k1, v1 of config[loc]
continue if k1 is 'dir'
for own k2, v2 of v1
continue if k2 is 'dir'
continue if k2 is 'server'
for own k3, v3 of v2
continue if k3 is 'dir'
if k1 is 'app'
v3.dirName = options[loc].client[k3].dir or dir[k3]
else
v3.dirName = dir[k3]
addDirName 'dist'
# server
# ======
removeServerDir = ->
['dist', 'src'].forEach (v1) ->
['app', 'rb'].forEach (v2) ->
config[v1][v2].server.scripts.dir = config[v1][v2].server.dir
delete config[v1][v2].server.dir
addToServerAppDist = ->
config.dist.app.server.scripts.file = # app server dist entry file
options.dist.server.file or file.appServer
config.dist.app.server.scripts.path = # absolute path
path.join config.app.dir, config.dist.app.server.scripts.dir
removeServerDir() # server dir is server.scripts.dir
addToServerAppDist() # add file and path
config.dist.rb.server.scripts.file = file.rbServer # rb server dist bootstrap file
# final touch-ups
# ===============
formatDist = ->
['app', 'rb'].forEach (v) ->
delete config.dist[v].dir
formatDist() # only one dist.dir
# logs
# ====
# log.json config.dist, 'config.dist ='
# log.json config.src, 'config.src ='
# log.json config, 'config ='
# return
# ======
config