UNPKG

2.79 kBJavaScriptView Raw
1var util = require('util');
2var _ = require('lodash');
3
4var app = {};
5
6/**
7 * Worker
8 *
9 * Attaches defined data to parameter which inherit the data.
10 * It uses 2 functions, preProcess and postProcess (with the result of preProcess).
11 *
12 * preProcess Generates a list with [defineName][name][version] = value
13 * postProcess Attach the preProcess data with the nearest version to the tree.
14 *
15 * @param {Object} _app
16 */
17function Worker(_app) {
18 var self = this;
19
20 // global variables
21 app = _app;
22
23 // class variables
24 this.workers = {};
25
26 // load worker
27 var workers = Object.keys(app.workers);
28 workers.forEach(function(worker) {
29 var filename = app.workers[worker];
30 app.log.debug('load worker: ' + worker + ', ' + filename);
31 self.addWorker(worker, require(filename));
32 });
33}
34
35/**
36 * Inherit
37 */
38util.inherits(Worker, Object);
39
40/**
41 * Exports
42 */
43module.exports = Worker;
44
45/**
46 * Add Worker
47 */
48Worker.prototype.addWorker = function(name, worker) {
49 this.workers[name] = worker;
50};
51
52/**
53 * Execute worker
54 *
55 * @todo Add priority system (if needed), if a plugin need an other operation to be done before.
56 */
57Worker.prototype.process = function(parsedFiles, parsedFilenames, packageInfos) {
58 // some smaller operation that are not outsourced to extra workers
59 // TODO: add priority system first and outsource them then
60 parsedFiles.forEach(function(parsedFile, fileIndex) {
61 parsedFile.forEach(function(block) {
62 if (Object.keys(block.global).length === 0 && Object.keys(block.local).length > 0) {
63 if ( ! block.local.type)
64 block.local.type = '';
65
66 if ( ! block.local.url)
67 block.local.url = '';
68
69 if ( ! block.local.version)
70 block.local.version = '0.0.0';
71
72 if ( ! block.local.filename)
73 block.local.filename = parsedFilenames[fileIndex];
74
75 // convert dir delimeter \\ to /
76 block.local.filename = block.local.filename.replace(/\\/g, '/');
77 }
78
79 });
80 });
81
82 // process transformations and assignments for each @api-Parameter
83 var preProcessResults = {};
84
85 _.each(this.workers, function(worker, name) {
86 if (worker.preProcess) {
87 app.log.verbose('worker preProcess: ' + name);
88 var result = worker.preProcess(parsedFiles, parsedFilenames, packageInfos);
89 _.extend(preProcessResults, result);
90 }
91 });
92 _.each(this.workers, function(worker, name) {
93 if (worker.postProcess) {
94 app.log.verbose('worker postProcess: ' + name);
95 worker.postProcess(parsedFiles, parsedFilenames, preProcessResults, packageInfos);
96 }
97 });
98};