1 | const getFn = require('./util/get-fn')
|
2 | const DONE_COMPUTE = ['done', 'compute']
|
3 | const DONE = ['done']
|
4 |
|
5 | exports.props = {
|
6 | after: {
|
7 | on (val, stamp, after) {
|
8 | const task = after.parent()
|
9 | const fn = getFn(task)
|
10 | if (fn) {
|
11 | task.set((task, ploy, cwd) => {
|
12 | const aftertasks = after.serialize()
|
13 | const tasks = task.parent()
|
14 | const afterall = (val, stamp, d) => {
|
15 | const alldone = aftertasks.every(key => Array.isArray(key)
|
16 | ? tasks.get(key.concat(DONE_COMPUTE))
|
17 | : tasks.get([key, 'done', 'compute'])
|
18 | )
|
19 | if (alldone) {
|
20 | if (fn) {
|
21 | task.set({ done: false }, false)
|
22 | task.set(fn(task, ploy, cwd), stamp)
|
23 | }
|
24 | }
|
25 | }
|
26 | aftertasks.forEach(key => {
|
27 | const done = Array.isArray(key)
|
28 | ? tasks.get(key.concat(DONE), {})
|
29 | : tasks.get([key, 'done'], {})
|
30 | done.on(afterall, after.path().join('.'))
|
31 | afterall(done.compute(), stamp)
|
32 | })
|
33 | }, stamp)
|
34 | } else {
|
35 | after.root().emit('error', `after used, but no val found! ${after.path()}`)
|
36 | }
|
37 | }
|
38 | }
|
39 | }
|