]> git.wincent.com - wincent.git/commitdiff
feat: add TaskRegistry.get()
authorGreg Hurrell <greg@hurrell.net>
Sat, 28 Mar 2020 16:19:05 +0000 (17:19 +0100)
committerGreg Hurrell <greg@hurrell.net>
Sat, 28 Mar 2020 16:19:05 +0000 (17:19 +0100)
src/Fig/TaskRegistry.ts
src/main.ts

index a816b6ca96c3dbd2d360790f56e291c40e948186..e2eb966e25a8351c5eba8c45b31290ec2145f125 100644 (file)
@@ -12,3 +12,7 @@ export function register(aspect: Aspect, callback: Callback) {
 
   callbacks.get(aspect)!.push(callback);
 }
+
+export function get(aspect: Aspect): Array<Callback> {
+  return callbacks.get(aspect) || [];
+}
index 2c1ea9a9f92dff905d430a06bf83789e033a20c1..98e97e83462571a69431e25efc7784fdc82f872e 100644 (file)
@@ -2,7 +2,8 @@ import * as os from 'os';
 import * as path from 'path';
 
 import Attributes from './Attributes';
-import {root} from './Fig';
+import * as Fig from './Fig';
+import * as TaskRegistry from './Fig/TaskRegistry';
 import {log} from './console';
 import merge from './merge';
 import readAspect from './readAspect';
@@ -20,7 +21,7 @@ async function main() {
 
   await test();
 
-  const project = await readProject(path.join(root, 'project.json'));
+  const project = await readProject(path.join(Fig.root, 'project.json'));
 
   const hostname = os.hostname();
 
@@ -49,11 +50,22 @@ async function main() {
     platform
   ];
 
+  // Register tasks.
+  for (const aspect of aspects) {
+    switch (aspect) {
+      case 'terminfo':
+        require('../aspects/terminfo');
+        break;
+    }
+  }
+
   const baseVariables = merge(profileVariables, platformVariables);
 
+  // Execute tasks. (Separate step so we can bail on configuration errors before
+  // touching filesystem).
   for (const aspect of aspects) {
     const {description, variables: aspectVariables = {}} = await readAspect(
-      path.join(root, 'aspects', aspect, 'aspect.json')
+      path.join(Fig.root, 'aspects', aspect, 'aspect.json')
     );
     log.info(`${aspect}: ${description}`);
 
@@ -61,14 +73,8 @@ async function main() {
 
     log.debug(`variables:\n\n${JSON.stringify(mergedVariables, null, 2)}\n`);
 
-    switch (aspect) {
-      case 'terminfo':
-        require('../aspects/terminfo');
-        break;
-    }
+    TaskRegistry.get(aspect).forEach((callback) => callback(Fig));
   }
-
-  // TODO: decide whether to register tasks for deferred running, or run them eagerly
 }
 
 main().catch((error) => {