enso
Version:
Maximalist state & form management library for React
101 lines (74 loc) • 1.74 kB
JavaScript
"use client";
import { AtomImpl, AtomOptionalInternal, AtomProxyInternal } from "../atom/implementation.js";
export { StateImpl as State, StateProxyImpl as StateProxy };
//#region State
export class StateImpl extends AtomImpl {
//#region Static
static prop = "state";
static create(value, parent) {
return new StateImpl(value, parent);
}
static proxy(state, intoMapper, fromMapper) {
return new StateProxyImpl(state, intoMapper, fromMapper);
}
static optional(target) {
return new StateOptionalImpl(target);
}
//#endregion
//#region Instance
constructor(value, parent) {
super(value, parent);
}
//#endregion
//#region Meta
useMeta(_props) {
return {};
}
//#endregion
//#region Cache
clearCache() {
AtomImpl.prototype.clearCache.call(this);
}
//#endregion
}
//#endregion
//#region StateProxy
export class StateProxyImpl extends StateImpl {
#internal;
constructor(source, into, from) {
const value = into(source.value, undefined);
super(value, {
source
});
this.#internal = new AtomProxyInternal(this, source, into, from);
}
deconstruct() {
this.#internal.deconstruct();
}
connect(source) {
this.#internal.connect(source);
}
}
//#endregion
//#region StateOptional
export class StateOptionalImpl extends StateImpl {
#internal;
constructor(target) {
super(AtomOptionalInternal.value("state", target));
this.#internal = new AtomOptionalInternal(this, target);
}
//#region Value
get value() {
return this.#internal.value;
}
//#endregion
//#region Tree
at(key) {
return this.#internal.at(key);
}
get try() {
return this.#internal.try;
}
//#endregion
}
//#endregion