realar
Advanced tools
Comparing version 0.6.3 to 0.6.4
@@ -104,3 +104,2 @@ "use strict"; | ||
const key_flag = 'flag'; | ||
const key_invert = 'invert'; | ||
const key_from = 'from'; | ||
@@ -122,2 +121,4 @@ const key_is_signal = new_symbol(); | ||
const key_func = 'func'; | ||
const key_resolved = 'resolved'; | ||
const key_is_trigger = new_symbol(); | ||
const obj_def_prop_value = (obj, key, value) => (obj_def_prop(obj, key, { value }), value); | ||
@@ -168,10 +169,13 @@ const obj_def_prop_trait = (obj, key, trait) => obj_def_prop(obj, key, { | ||
const ctx = this; | ||
const h = ctx[key_handler]; | ||
if (!ctx[key_promise_internal]) { | ||
ctx[key_promise_internal] = new Promise((resolve) => | ||
// TODO: should be the highest priority. | ||
expr(ctx[key_get], () => { | ||
if (!ctx[key_handler][key_reset_promise_by_reset]) | ||
ctx[key_promise_internal] = 0; | ||
resolve(ctx[key_get]()); | ||
})[0]()); | ||
ctx[key_promise_internal] = (h[key_is_trigger] && h[key_touched_internal]) | ||
? Promise.resolve(untrack(ctx[key_get])) | ||
: new Promise((resolve) => | ||
// TODO: should be the highest priority. | ||
expr(ctx[key_get], () => { | ||
if (!ctx[key_handler][key_reset_promise_by_reset]) | ||
ctx[key_promise_internal] = 0; | ||
resolve(ctx[key_get]()); | ||
})[0]()); | ||
} | ||
@@ -437,2 +441,3 @@ return ctx[key_promise_internal]; | ||
h[key_is_signal] = is_signal; | ||
h[key_is_trigger] = 1; | ||
h[key_has_default] = 1; | ||
@@ -470,4 +475,13 @@ return fill_entity(h, proto_entity_writtable_leaf, 1, initial, 0, set); | ||
const signal_trigger = (initial) => make_trigger(initial, 0, 1); | ||
const signal_trigger_resolved = (val) => { | ||
const ent = signal_trigger(val); | ||
ent(val); | ||
return ent; | ||
}; | ||
const signal_trigger_flag = (initial) => make_trigger(!!initial, 1, 1); | ||
const signal_trigger_flag_invert = (initial) => make_trigger(!initial, 1, 1); | ||
const signal_trigger_flag_resolved = (val) => { | ||
const flag = signal_trigger(!val); | ||
flag(!!val); | ||
return flag; | ||
}; | ||
const signal_from = (get, set) => { | ||
@@ -482,4 +496,5 @@ const h = [get[key_get] || get]; | ||
}; | ||
signal_trigger_flag[key_invert] = signal_trigger_flag_invert; | ||
signal_trigger_flag[key_resolved] = signal_trigger_flag_resolved; | ||
signal_trigger[key_flag] = signal_trigger_flag; | ||
signal_trigger[key_resolved] = signal_trigger_resolved; | ||
signal[key_trigger] = signal_trigger; | ||
@@ -486,0 +501,0 @@ signal[key_from] = signal_from; |
@@ -219,5 +219,8 @@ import { FC } from 'react'; | ||
} | ||
interface E_ResetPartial { | ||
reset(): any; | ||
} | ||
interface E_Readable<O, Ret> extends E_GetPartial<O>, E_PromisePartial<O>, E_SyncToPartial<O, Ret>, E_OpPartial<Ret>, E_SelectPartial<WillExpand<O>> { | ||
} | ||
interface E_Writtable<I, O, Ret> extends E_Readable<O, Ret>, E_UpdatePartial<I, WillExpand<O>>, E_UpdaterPartial<I, WillExpand<O>> { | ||
interface E_Writtable<I, O, Ret> extends E_Readable<O, Ret>, E_UpdatePartial<I, WillExpand<O>>, E_UpdaterPartial<I, WillExpand<O>>, E_ResetPartial { | ||
} | ||
@@ -230,4 +233,4 @@ interface E_Value<I, O> extends E_Writtable<I, O, Value<I, O>> { | ||
pre: E_PreFilterUnTrackedPartial<I, Value<I, O>> & { | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Value<N, O>; | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Value<N, O>; | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Value<void, O> : Value<N, O>; | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Value<void, O> : Value<N, O>; | ||
}; | ||
@@ -252,4 +255,4 @@ wrap: { | ||
pre: E_PreFilterUnTrackedPartial<I, Signal<I, O>> & { | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Signal<N, O>; | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Signal<N, O>; | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Signal<void, O> : Signal<N, O>; | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Signal<void, O> : Signal<N, O>; | ||
}; | ||
@@ -370,7 +373,10 @@ wrap: { | ||
(initial: boolean): Signal<void, boolean>; | ||
invert: { | ||
(): Signal<void, boolean>; | ||
(initial: boolean): Signal<void, boolean>; | ||
resolved: { | ||
(value: boolean): Signal<void, boolean>; | ||
}; | ||
}; | ||
resolved: { | ||
<T>(value: T): Signal<void, T>; | ||
(): Signal; | ||
}; | ||
}; | ||
@@ -377,0 +383,0 @@ from: { |
{ | ||
"name": "realar", | ||
"version": "0.6.3", | ||
"version": "0.6.4", | ||
"description": "Advanced state manager for React", | ||
@@ -91,3 +91,3 @@ "repository": { | ||
}, | ||
"gitHead": "2463f083d08bf025c90a27516f34d21b0cc18b2e" | ||
"gitHead": "5b7febcbbe0dafc8e3fba69f49bcc2c2c9e421f9" | ||
} |
@@ -118,3 +118,2 @@ # Realar | ||
- [on](./docs/api.md#on) | ||
- [on.once](./docs/api.md#ononce) | ||
- [sync](./docs/api.md#sync) | ||
@@ -139,6 +138,4 @@ - [cycle](./docs/api.md#cycle) | ||
- [untrack](./docs/api.md#untrack) | ||
- [untrack.func](./docs/api.md#untrackfunc) | ||
- React bindings | ||
- [observe](./docs/api.md#observe) | ||
- [observe.nomemo](./docs/api.md#observenomemo) | ||
- [useValue](./docs/api.md#usevalue) | ||
@@ -145,0 +142,0 @@ - [useValues](./docs/api.md#usevalues) |
@@ -180,3 +180,2 @@ import React, { Context, FC } from 'react'; | ||
const key_flag = 'flag'; | ||
const key_invert = 'invert'; | ||
const key_from = 'from'; | ||
@@ -198,2 +197,4 @@ const key_is_signal = new_symbol(); | ||
const key_func = 'func'; | ||
const key_resolved = 'resolved'; | ||
const key_is_trigger = new_symbol(); | ||
@@ -262,10 +263,13 @@ | ||
const ctx = this; | ||
const h = ctx[key_handler]; | ||
if (!ctx[key_promise_internal]) { | ||
ctx[key_promise_internal] = new Promise((resolve) => | ||
// TODO: should be the highest priority. | ||
expr(ctx[key_get], () => { | ||
if (!ctx[key_handler][key_reset_promise_by_reset]) ctx[key_promise_internal] = 0; | ||
resolve(ctx[key_get]()); | ||
})[0]() | ||
); | ||
ctx[key_promise_internal] = (h[key_is_trigger] && h[key_touched_internal]) | ||
? Promise.resolve(untrack(ctx[key_get])) | ||
: new Promise((resolve) => | ||
// TODO: should be the highest priority. | ||
expr(ctx[key_get], () => { | ||
if (!ctx[key_handler][key_reset_promise_by_reset]) ctx[key_promise_internal] = 0; | ||
resolve(ctx[key_get]()); | ||
})[0]() | ||
); | ||
} | ||
@@ -750,2 +754,3 @@ return ctx[key_promise_internal]; | ||
h[key_is_signal] = is_signal; | ||
h[key_is_trigger] = 1; | ||
h[key_has_default] = 1; | ||
@@ -796,4 +801,9 @@ return fill_entity(h, proto_entity_writtable_leaf, 1, initial, 0, set); | ||
const signal_trigger = (initial) => make_trigger(initial, 0, 1); | ||
const signal_trigger_resolved = (val) => { | ||
const ent = signal_trigger(val); ent(val); return ent; | ||
} | ||
const signal_trigger_flag = (initial) => make_trigger(!!initial, 1, 1); | ||
const signal_trigger_flag_invert = (initial) => make_trigger(!initial, 1, 1); | ||
const signal_trigger_flag_resolved = (val) => { | ||
const flag = signal_trigger(!val); flag(!!val); return flag; | ||
} | ||
const signal_from = (get, set?) => { | ||
@@ -808,4 +818,5 @@ const h = [get[key_get] || get]; | ||
signal_trigger_flag[key_invert] = signal_trigger_flag_invert; | ||
signal_trigger_flag[key_resolved] = signal_trigger_flag_resolved; | ||
signal_trigger[key_flag] = signal_trigger_flag; | ||
signal_trigger[key_resolved] = signal_trigger_resolved; | ||
signal[key_trigger] = signal_trigger as any; | ||
@@ -812,0 +823,0 @@ signal[key_from] = signal_from; |
@@ -274,2 +274,5 @@ import { FC } from 'react'; | ||
} | ||
interface E_ResetPartial { | ||
reset(); | ||
} | ||
@@ -286,3 +289,4 @@ interface E_Readable<O, Ret> extends | ||
E_UpdatePartial<I, WillExpand<O>>, | ||
E_UpdaterPartial<I, WillExpand<O>> {} | ||
E_UpdaterPartial<I, WillExpand<O>>, | ||
E_ResetPartial {} | ||
@@ -299,4 +303,4 @@ | ||
pre: E_PreFilterUnTrackedPartial<I, Value<I, O>> & { | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Value<N, O> // untracked by default | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Value<N, O> | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Value<void, O> : Value<N, O> // untracked by default | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Value<void, O> : Value<N, O> | ||
} | ||
@@ -331,4 +335,4 @@ wrap: { | ||
pre: E_PreFilterUnTrackedPartial<I, Signal<I, O>> & { | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Signal<N, O> // untracked by default | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Signal<N, O> | ||
<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Signal<void, O> : Signal<N, O> // untracked by default | ||
track<N>(func?: (value: N, state: WillExpand<O>) => I): Equals<N, unknown> extends true ? Signal<void, O> : Signal<N, O> | ||
} | ||
@@ -476,7 +480,11 @@ wrap: { | ||
invert: { | ||
(): Signal<void, boolean>; | ||
(initial: boolean): Signal<void, boolean>; | ||
resolved: { | ||
(value: boolean): Signal<void, boolean>; | ||
} | ||
} | ||
resolved: { | ||
<T>(value: T): Signal<void, T>; | ||
(): Signal; | ||
} | ||
}; | ||
@@ -483,0 +491,0 @@ |
Sorry, the diff of this file is not supported yet
218820
2963
176