@ryo-98/react-api-bridge
Version:
A registry for component imperative api
40 lines (39 loc) • 979 B
JavaScript
function getResolverOrCreateWhenMissing(apiNList, contextValue, initial, pendingResolverMap) {
let contextValueMap = pendingResolverMap.get(apiNList);
if (!contextValueMap) {
contextValueMap = /* @__PURE__ */ new Map();
pendingResolverMap.set(apiNList, contextValueMap);
}
let bucket = contextValueMap.get(contextValue);
if (!bucket) {
bucket = {
waiters: /* @__PURE__ */ new Set()
};
contextValueMap.set(contextValue, bucket);
}
let resolver = initial ? bucket.initialResolver : void 0;
if (!resolver) {
let outerResolve;
const newPromise = new Promise((resolve) => {
outerResolve = resolve;
});
resolver = {
initial,
promise: newPromise,
resolve: outerResolve
};
if (initial) {
bucket.initialResolver = resolver;
} else {
bucket.waiters.add(resolver);
}
}
return {
resolver,
contextValueMap,
bucket
};
}
export {
getResolverOrCreateWhenMissing
};