Files
ospab.host/node_modules/effect/dist/esm/TestAnnotationMap.js
2025-09-15 18:10:26 +03:00

80 lines
2.0 KiB
JavaScript

/**
* @since 2.0.0
*/
import { dual } from "./Function.js";
import * as HashMap from "./HashMap.js";
import { hasProperty } from "./Predicate.js";
/**
* @since 2.0.0
*/
export const TestAnnotationMapTypeId = /*#__PURE__*/Symbol.for("effect/TestAnnotationMap");
/** @internal */
class TestAnnotationMapImpl {
map;
[TestAnnotationMapTypeId] = TestAnnotationMapTypeId;
constructor(map) {
this.map = map;
}
}
/**
* @since 2.0.0
*/
export const isTestAnnotationMap = u => hasProperty(u, TestAnnotationMapTypeId);
/**
* @since 2.0.0
*/
export const empty = () => new TestAnnotationMapImpl(HashMap.empty());
/**
* @since 2.0.0
*/
export const make = map => {
return new TestAnnotationMapImpl(map);
};
/**
* @since 2.0.0
*/
export const overwrite = /*#__PURE__*/dual(3, (self, key, value) => make(HashMap.set(self.map, key, value)));
/**
* @since 2.0.0
*/
export const update = /*#__PURE__*/dual(3, (self, key, f) => {
let value = key.initial;
if (HashMap.has(self.map, key)) {
value = HashMap.unsafeGet(self.map, key);
}
return overwrite(self, key, f(value));
});
/**
* Retrieves the annotation of the specified type, or its default value if
* there is none.
*
* @since 2.0.0
*/
export const get = /*#__PURE__*/dual(2, (self, key) => {
if (HashMap.has(self.map, key)) {
return HashMap.unsafeGet(self.map, key);
}
return key.initial;
});
/**
* Appends the specified annotation to the annotation map.
*
* @since 2.0.0
*/
export const annotate = /*#__PURE__*/dual(3, (self, key, value) => update(self, key, _ => key.combine(_, value)));
/**
* @since 2.0.0
*/
export const combine = /*#__PURE__*/dual(2, (self, that) => {
let result = self.map;
for (const entry of that.map) {
if (HashMap.has(result, entry[0])) {
const value = HashMap.get(result, entry[0]);
result = HashMap.set(result, entry[0], entry[0].combine(value, entry[1]));
} else {
result = HashMap.set(result, entry[0], entry[1]);
}
}
return make(result);
});
//# sourceMappingURL=TestAnnotationMap.js.map