1 | "use strict";
|
2 | var __spreadArrays = (this && this.__spreadArrays) || function () {
|
3 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
4 | for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
5 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
6 | r[k] = a[j];
|
7 | return r;
|
8 | };
|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
10 | exports.Dgeni = void 0;
|
11 |
|
12 | var di = require('di');
|
13 | var Package_1 = require("./Package");
|
14 | var processorValidation_1 = require("./legacyPackages/processorValidation");
|
15 | var dependency_sort_1 = require("./util/dependency-sort");
|
16 | var getInjectables_1 = require("./util/getInjectables");
|
17 | var log_1 = require("./util/log");
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | var Dgeni = (function () {
|
24 | function Dgeni(packages) {
|
25 | var _this = this;
|
26 | if (packages === void 0) { packages = []; }
|
27 | this.packages = {};
|
28 | if (!Array.isArray(packages)) {
|
29 | throw new Error('packages must be an array');
|
30 | }
|
31 |
|
32 | this.package(processorValidation_1.processorValidationPackage);
|
33 | packages.map(function (p) { return _this.package(p); });
|
34 | }
|
35 | |
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | Dgeni.prototype.package = function (pkg, dependencies) {
|
42 | var _this = this;
|
43 | if (dependencies === void 0) { dependencies = []; }
|
44 | if (this.injector) {
|
45 | throw new Error('injector already configured - you cannot add a new package');
|
46 | }
|
47 | if (typeof pkg === 'string') {
|
48 | pkg = new Package_1.Package(pkg, dependencies);
|
49 | }
|
50 | if (!(Package_1.Package.isPackage(pkg))) {
|
51 | throw new Error('package must be an instance of Package');
|
52 | }
|
53 | if (this.packages[pkg.name]) {
|
54 | throw new Error('The "' + pkg.name + '" package has already been loaded');
|
55 | }
|
56 | this.packages[pkg.name] = pkg;
|
57 |
|
58 | pkg.namedDependencies = pkg.dependencies.map(function (dependency) {
|
59 | if (Package_1.Package.isPackage(dependency)) {
|
60 |
|
61 | if (!_this.packages[dependency.name]) {
|
62 | _this.package(dependency);
|
63 | }
|
64 | return dependency.name;
|
65 | }
|
66 | return dependency;
|
67 | });
|
68 |
|
69 | return pkg;
|
70 | };
|
71 | |
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 | Dgeni.prototype.configureInjector = function () {
|
106 | var _this = this;
|
107 | if (!this.injector) {
|
108 |
|
109 |
|
110 | var packages = this.packages = dependency_sort_1.sortByDependency(this.packages, 'namedDependencies');
|
111 |
|
112 | this.stopOnProcessingError = true;
|
113 | var dgeniModule = new di.Module()
|
114 | .value('dgeni', this)
|
115 | .factory('log', log_1.logFactory)
|
116 | .factory('getInjectables', getInjectables_1.getInjectablesFactory);
|
117 |
|
118 | var modules = packages.map(function (pkg) { return pkg.module; });
|
119 | modules.unshift(dgeniModule);
|
120 |
|
121 | var injector_1 = this.injector = new di.Injector(modules);
|
122 |
|
123 | packages.forEach(function (pkg) { return pkg.configFns.forEach(function (configFn) { return injector_1.invoke(configFn); }); });
|
124 |
|
125 | var processorMap_1 = {};
|
126 | this.handlerMap = {};
|
127 | packages.forEach(function (pkg) {
|
128 | pkg.processors.forEach(function (processorName) {
|
129 | var processor = injector_1.get(processorName);
|
130 |
|
131 | processor.name = processorName;
|
132 | processor.$package = pkg.name;
|
133 |
|
134 | if (processor.$enabled !== false) {
|
135 | processorMap_1[processorName] = processor;
|
136 | }
|
137 | });
|
138 | var _loop_1 = function (eventName) {
|
139 | var handlers = _this.handlerMap[eventName] = (_this.handlerMap[eventName] || []);
|
140 | pkg.handlers[eventName].forEach(function (handlerName) { return handlers.push(injector_1.get(handlerName)); });
|
141 | };
|
142 | for (var eventName in pkg.handlers) {
|
143 | _loop_1(eventName);
|
144 | }
|
145 | });
|
146 |
|
147 |
|
148 |
|
149 | this.processors = dependency_sort_1.sortByDependency(processorMap_1, '$runAfter', '$runBefore');
|
150 | }
|
151 | return this.injector;
|
152 | };
|
153 | |
154 |
|
155 |
|
156 |
|
157 | Dgeni.prototype.generate = function () {
|
158 | var _this = this;
|
159 | var injector = this.configureInjector();
|
160 | var log = injector.get('log');
|
161 | var processingPromise = this.triggerEvent('generationStart');
|
162 |
|
163 | var currentDocs = [];
|
164 | processingPromise = processingPromise.then(function () { return currentDocs; });
|
165 | this.processors.forEach(function (processor) {
|
166 | processingPromise = processingPromise.then(function (docs) { return _this.runProcessor(processor, docs); });
|
167 | });
|
168 | processingPromise.catch(function (error) {
|
169 | log.error(error.message);
|
170 | if (error.stack) {
|
171 | log.debug(error.stack);
|
172 | }
|
173 | log.error('Failed to process the docs');
|
174 | });
|
175 | return processingPromise.then(function (docs) {
|
176 | _this.triggerEvent('generationEnd');
|
177 | return docs;
|
178 | });
|
179 | };
|
180 | Dgeni.prototype.runProcessor = function (processor, docs) {
|
181 | var _this = this;
|
182 | var log = this.injector.get('log');
|
183 | var promise = Promise.resolve(docs);
|
184 | if (!processor.$process) {
|
185 | return promise;
|
186 | }
|
187 | return promise
|
188 | .then(function () {
|
189 | log.info('running processor:', processor.name);
|
190 | return _this.triggerProcessorEvent('processorStart', processor, docs);
|
191 | })
|
192 |
|
193 |
|
194 |
|
195 | .then(function (docs) { return processor.$process(docs) || docs; })
|
196 | .then(function (docs) { return _this.triggerProcessorEvent('processorEnd', processor, docs); })
|
197 | .catch(function (error) {
|
198 | error.message = 'Error running processor "' + processor.name + '":\n' + error.message;
|
199 | if (_this.stopOnProcessingError) {
|
200 | return Promise.reject(error);
|
201 | }
|
202 | else {
|
203 | log.error(error.message);
|
204 | }
|
205 | return docs;
|
206 | });
|
207 | };
|
208 | |
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
214 | Dgeni.prototype.triggerEvent = function (eventName) {
|
215 | var extras = [];
|
216 | for (var _i = 1; _i < arguments.length; _i++) {
|
217 | extras[_i - 1] = arguments[_i];
|
218 | }
|
219 | var handlers = this.handlerMap[eventName];
|
220 | var handlersPromise = Promise.resolve();
|
221 | var results = [];
|
222 | if (handlers) {
|
223 | handlers.forEach(function (handler) {
|
224 | handlersPromise = handlersPromise.then(function () {
|
225 | var handlerPromise = Promise.resolve(handler.apply(void 0, __spreadArrays([eventName], extras)));
|
226 | handlerPromise.then(function (result) { return results.push(result); });
|
227 | return handlerPromise;
|
228 | });
|
229 | });
|
230 | }
|
231 | return handlersPromise.then(function () { return results; });
|
232 | };
|
233 | Dgeni.prototype.triggerProcessorEvent = function (eventName, processor, docs) {
|
234 | return this.triggerEvent(eventName, processor, docs).then(function () { return docs; });
|
235 | };
|
236 | Dgeni.prototype.info = function () {
|
237 | var injector = this.configureInjector();
|
238 | var log = injector.get('log');
|
239 | for (var pkgName in this.packages) {
|
240 | log.info(pkgName, '[' + this.packages[pkgName].dependencies.map(function (dep) { return JSON.stringify(dep.name); }).join(', ') + ']');
|
241 | }
|
242 | log.info('== Processors (processing order) ==');
|
243 | this.processors.forEach(function (processor, index) {
|
244 | log.info((index + 1) + ': ' + processor.name, processor.$process ? '' : '(abstract)', ' from ', processor.$package);
|
245 | if (processor.description) {
|
246 | log.info(' ', processor.description);
|
247 | }
|
248 | });
|
249 | };
|
250 | Dgeni.Package = Package_1.Package;
|
251 | return Dgeni;
|
252 | }());
|
253 | exports.Dgeni = Dgeni;
|
254 |
|
\ | No newline at end of file |