UNPKG

1.22 kBJavaScriptView Raw
1const getFn = require('./util/get-fn')
2const DONE_COMPUTE = ['done', 'compute']
3const DONE = ['done']
4
5exports.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}