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

56 lines
1.4 KiB
JavaScript

/**
* @since 2.0.0
*/
import * as Effect from "./Effect.js";
import { dual } from "./Function.js";
import { pipeArguments } from "./Pipeable.js";
import { hasProperty } from "./Predicate.js";
import * as Readable from "./Readable.js";
import * as Stream from "./Stream.js";
/**
* @since 2.0.0
* @category type ids
*/
export const TypeId = /*#__PURE__*/Symbol.for("effect/Subscribable");
/**
* @since 2.0.0
* @category refinements
*/
export const isSubscribable = u => hasProperty(u, TypeId);
const Proto = {
[Readable.TypeId]: Readable.TypeId,
[TypeId]: TypeId,
pipe() {
return pipeArguments(this, arguments);
}
};
/**
* @since 2.0.0
* @category constructors
*/
export const make = options => Object.assign(Object.create(Proto), options);
/**
* @since 2.0.0
* @category combinators
*/
export const map = /*#__PURE__*/dual(2, (self, f) => make({
get: Effect.map(self.get, f),
changes: Stream.map(self.changes, f)
}));
/**
* @since 2.0.0
* @category combinators
*/
export const mapEffect = /*#__PURE__*/dual(2, (self, f) => make({
get: Effect.flatMap(self.get, f),
changes: Stream.mapEffect(self.changes, f)
}));
/**
* @since 2.0.0
* @category constructors
*/
export const unwrap = effect => make({
get: Effect.flatMap(effect, s => s.get),
changes: Stream.unwrap(Effect.map(effect, s => s.changes))
});
//# sourceMappingURL=Subscribable.js.map