@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
77 lines • 2.96 kB
JavaScript
/**
* @module CircuitBreaker
*/
import {} from "../../../../circuit-breaker/contracts/_module.js";
import { CircuitBreaker, } from "../../../../circuit-breaker/implementations/derivables/circuit-breaker-provider/circuit-breaker.js";
import {} from "../../../../event-bus/contracts/_module.js";
import {} from "../../../../namespace/_module.js";
import {} from "../../../../serde/contracts/_module.js";
import {} from "../../../../time-span/implementations/_module.js";
import { getConstructorName, } from "../../../../utilities/_module.js";
/**
* @internal
*/
export class CircuitBreakerSerdeTransformer {
adapter;
namespace;
slowCallTime;
errorPolicy;
trigger;
eventBus;
serdeTransformerName;
enableAsyncTracking;
constructor(settings) {
const { adapter, namespace, slowCallTime, errorPolicy, trigger, eventBus, serdeTransformerName, enableAsyncTracking, } = settings;
this.enableAsyncTracking = enableAsyncTracking;
this.adapter = adapter;
this.namespace = namespace;
this.slowCallTime = slowCallTime;
this.errorPolicy = errorPolicy;
this.trigger = trigger;
this.eventBus = eventBus;
this.serdeTransformerName = serdeTransformerName;
}
get name() {
return [
"circuitBreaker",
this.serdeTransformerName,
getConstructorName(this.adapter),
this.namespace.toString(),
].filter((str) => str !== "");
}
isApplicable(value) {
const isCircuitBreaker = value instanceof CircuitBreaker &&
getConstructorName(value) === CircuitBreaker.name;
if (!isCircuitBreaker) {
return false;
}
const isSerdTransformerNameMathcing = this.serdeTransformerName ===
value._internal_getSerdeTransformerName();
const isNamespaceMatching = this.namespace.toString() ===
value._internal_getNamespace().toString();
const isAdapterMatching = getConstructorName(this.adapter) ===
getConstructorName(value._internal_getAdapter());
return (isSerdTransformerNameMathcing &&
isNamespaceMatching &&
isAdapterMatching);
}
deserialize(serializedValue) {
const { key } = serializedValue;
const keyObj = this.namespace.create(key);
return new CircuitBreaker({
enableAsyncTracking: this.enableAsyncTracking,
eventDispatcher: this.eventBus,
adapter: this.adapter,
key: keyObj,
slowCallTime: this.slowCallTime,
errorPolicy: this.errorPolicy,
trigger: this.trigger,
serdeTransformerName: this.serdeTransformerName,
namespace: this.namespace,
});
}
serialize(deserializedValue) {
return CircuitBreaker._internal_serialize(deserializedValue);
}
}
//# sourceMappingURL=circuit-breaker-serde-transformer.js.map