41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import * as _ from "@preserves/core";
|
|
import * as _i_Actor from "../runtime/actor";
|
|
|
|
export const $Observe = Symbol.for("Observe");
|
|
|
|
export type _embedded = _i_Actor.Ref;
|
|
|
|
export type _val = _.Value<_embedded>;
|
|
|
|
export type Observe = {"label": symbol, "observer": _embedded};
|
|
|
|
|
|
export function Observe({label, observer}: {label: symbol, observer: _embedded}): Observe {return {"label": label, "observer": observer};}
|
|
|
|
export function asObserve(v: _val): Observe {
|
|
let result = toObserve(v);
|
|
if (result === void 0) throw new TypeError(`Invalid Observe: ${_.stringify(v)}`);
|
|
return result;
|
|
}
|
|
|
|
export function toObserve(v: _val): undefined | Observe {
|
|
let result: undefined | Observe;
|
|
if (_.Record.isRecord<_val, _.Tuple<_val>, _embedded>(v)) {
|
|
let _tmp0: (null) | undefined;
|
|
_tmp0 = _.is(v.label, $Observe) ? null : void 0;
|
|
if (_tmp0 !== void 0) {
|
|
let _tmp1: (symbol) | undefined;
|
|
_tmp1 = typeof v[0] === 'symbol' ? v[0] : void 0;
|
|
if (_tmp1 !== void 0) {
|
|
let _tmp2: (_embedded) | undefined;
|
|
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
|
|
if (_tmp2 !== void 0) {result = {"label": _tmp1, "observer": _tmp2};};
|
|
};
|
|
};
|
|
};
|
|
return result;
|
|
}
|
|
|
|
export function fromObserve(_v: Observe): _val {return _.Record($Observe, [_v["label"], _.embed(_v["observer"])]);}
|
|
|