]> git.wincent.com - wincent.git/blob - src/Fig/task.ts
feat(fig): support dynamic variables
[wincent.git] / src / Fig / task.ts
1 import {relative, sep} from 'path';
2 import * as url from 'url';
3
4 import {assertAspect} from '../types/Project.js';
5 import getCaller from '../getCaller.js';
6 import Context from './Context.js';
7 import {default as root} from './root.js';
8
9 export default function task(name: string, callback: () => Promise<void>) {
10     const caller = getCaller();
11
12     const path = url.fileURLToPath(caller);
13
14     const ancestors = relative(root, path).split(sep);
15
16     const aspect =
17         ancestors[0] === 'lib' && ancestors[1] === 'aspects' && ancestors[2];
18
19     if (!aspect) {
20         throw new Error(`Unable to determine aspect for ${caller}`);
21     }
22
23     assertAspect(aspect);
24
25     Context.tasks.register(aspect, callback, `${aspect} | ${name}`);
26 }