async-states
Version:
Core of async-states
66 lines (63 loc) • 2.32 kB
JavaScript
import { loadCache } from './StateCache.js';
import { attemptHydratedState } from './StateHydration.js';
import { success, initial, pending } from '../enums.js';
import { isFunction } from '../utils.js';
import { shallowClone, now } from '../helpers/core.js';
function initializeInstance(instance) {
loadCache(instance);
let maybeHydratedState = attemptHydratedState(instance);
if (maybeHydratedState) {
let [state, latestRun, payload] = maybeHydratedState;
instance.state = state;
instance.payload = payload;
instance.latestRun = latestRun;
if (instance.state.status === success) {
instance.lastSuccess = instance.state;
}
else {
let initializer = instance.config.initialValue;
let initialData = isFunction(initializer)
? initializer(instance.cache)
: initializer;
let savedInitialProps = {
args: [initialData],
payload: shallowClone(instance.payload),
};
instance.lastSuccess = {
status: initial,
data: initialData,
timestamp: now(),
props: savedInitialProps,
};
if (state.status === pending) {
let normalPromise = new Promise((resolve, reject) => {
instance.res = { res: resolve, rej: reject };
});
let promise = normalPromise;
promise.status = pending;
instance.promise = promise;
state.prev = instance.lastSuccess;
}
}
}
else {
let initializer = instance.config.initialValue;
let initialData = isFunction(initializer)
? initializer(instance.cache)
: initializer;
let savedInitialProps = {
args: [initialData],
payload: shallowClone(instance.payload),
};
let initialState = {
status: initial,
data: initialData,
timestamp: now(),
props: savedInitialProps,
};
instance.state = initialState;
instance.lastSuccess = initialState;
}
}
export { initializeInstance };
//# sourceMappingURL=StateInitialization.js.map