beyond
Version:
The Full Stack Universal Typescript Framework
84 lines (67 loc) • 2.34 kB
JavaScript
const DynamicProcessor = global.utils.DynamicProcessor(Map);
module.exports = class extends DynamicProcessor {
get dp() {
return 'processor.extender.compiler';
}
#processor;
get processor() {
return this.#processor;
}
#distribution;
get distribution() {
return this.#distribution;
}
get extendedCompilers() {
return this.children.get('extended.compilers').child;
}
#diagnostics;
get diagnostics() {
return this.#diagnostics;
}
get valid() {
return this.#diagnostics.valid;
}
/**
* Processors extender constructor
*
* @param processor {object} The processor object
* @param distribution {object} The distribution specification
*/
constructor(processor, distribution) {
super();
this.#processor = processor;
this.#distribution = distribution;
const {meta} = this.#processor;
const {extends: _extends} = meta.extender;
_extends.forEach(processor => this.set(processor, new Map()));
const children = [['extended.compilers', {child: new (require('./extended'))(processor)}]];
super.setup(new Map(children));
}
async _compile(updated, diagnostics, request) {
void (updated);
void (diagnostics);
void (request);
}
async _process(request) {
const diagnostics = new (require('./diagnostics'))();
const updated = new Map();
[...this.keys()].forEach(processor => updated.set(processor, new Map()));
const done = () => {
this.#diagnostics = diagnostics;
// Copy the compiled files of the extended processors
this.forEach((files, extended) => {
files.clear();
if (!updated.has(extended)) return;
updated.get(extended).forEach((value, key) => files.set(key, value));
});
}
if (!this.extendedCompilers.valid) {
diagnostics.set({general: this.extendedCompilers.errors});
done();
return;
}
await this._compile(updated, diagnostics, request);
if (this._request !== request) return;
done();
}
}