shallow-render
Version:
Shallow rendering test utility for Angular
39 lines • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.outputProxy = exports.PropertyNotAnEventEmitterOrSignalOutputError = exports.PropertyNotMarkedAsOutputError = void 0;
const core_1 = require("@angular/core");
const custom_error_1 = require("../models/custom-error");
const reflect_1 = require("./reflect");
const className = (object) => (object && object.constructor && object.constructor.name) || '<UnknownClass>';
class PropertyNotMarkedAsOutputError extends custom_error_1.CustomError {
constructor(key, component) {
super(`${String(key)} is not marked with the @Output() decorator. ` +
`Check that it is properly defined and set on the ${className(component)} class`);
}
}
exports.PropertyNotMarkedAsOutputError = PropertyNotMarkedAsOutputError;
class PropertyNotAnEventEmitterOrSignalOutputError extends custom_error_1.CustomError {
constructor(key, component) {
super(`${String(key)} is not an instance of an EventEmitter or a Signal Output. ` +
`Check that it is properly defined and set on the ${className(component)} class`);
}
}
exports.PropertyNotAnEventEmitterOrSignalOutputError = PropertyNotAnEventEmitterOrSignalOutputError;
// eslint-disable-next-line @typescript-eslint/ban-types
const outputProxy = (component) => {
const outputs = reflect_1.reflect.getInputsAndOutputs(component.constructor).outputs.map(o => o.propertyName);
return new Proxy({}, {
get: (_, key) => {
if (!outputs.includes(String(key))) {
throw new PropertyNotMarkedAsOutputError(key, component);
}
const maybeOutput = component[key];
if (!(maybeOutput instanceof core_1.EventEmitter) && !(maybeOutput instanceof core_1.OutputEmitterRef)) {
throw new PropertyNotAnEventEmitterOrSignalOutputError(key, component);
}
return maybeOutput;
},
});
};
exports.outputProxy = outputProxy;
//# sourceMappingURL=output-proxy.js.map