arch-unit-ts
Version:
49 lines • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MethodsTransformer = void 0;
const Assert_1 = require("../../error/domain/Assert");
const TypeScriptMethod_1 = require("../core/domain/TypeScriptMethod");
class MethodsTransformer {
description;
predicateAggregator;
constructor(description, predicateAggregator) {
Assert_1.Assert.notNullOrUndefined('description', description);
Assert_1.Assert.notNullOrUndefined('predicateAggregator', predicateAggregator);
this.description = description;
this.predicateAggregator = predicateAggregator;
}
addPredicate(predicate) {
return new MethodsTransformer(this.description, this.predicateAggregator.add(predicate));
}
switchModeAnd() {
return new MethodsTransformer(this.description, this.predicateAggregator.thatANDs());
}
switchModeOr() {
return new MethodsTransformer(this.description, this.predicateAggregator.thatORs());
}
transform(classes) {
const allMethods = classes.flatMap(tsClass => {
const sourceFile = tsClass.getSourceFile();
return sourceFile ? TypeScriptMethod_1.TypeScriptMethod.fromSourceFile(sourceFile, tsClass) : [];
});
if (this.predicateAggregator.getPredicate().isEmpty()) {
return allMethods;
}
return allMethods.filter(method => this.predicateAggregator
.getPredicate()
.map(predicate => predicate.test(method))
.orElseThrow());
}
getDescription() {
return this.description;
}
getFullDescription() {
return (this.description +
this.predicateAggregator
.getPredicate()
.map(predicate => ' ' + predicate.description)
.orElse(''));
}
}
exports.MethodsTransformer = MethodsTransformer;
//# sourceMappingURL=MethodsTransformer.js.map