isa-auth-core
Version:
83 lines (82 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get clearState () {
return clearState;
},
get deleteState () {
return deleteState;
},
get getState () {
return getState;
},
get hasState () {
return hasState;
},
get initState () {
return initState;
},
get setState () {
return setState;
},
get subscribe () {
return subscribe;
}
});
const _isautil = require("isa-util");
const _error = require("../console/error");
const store = new Map();
const listeners = new Map();
function initState(id, value) {
if ((0, _isautil.isUndefined)(value) || (0, _isautil.isFalsy)(id)) return (0, _error.storeError)('wrong', id);
store.set(id, value);
listeners.set(id, new Set());
}
function getState(id) {
const state = store.get(id);
if ((0, _isautil.isUndefined)(state)) {
(0, _error.storeError)('wrong', id);
return undefined;
}
return state;
}
function setState(id, value) {
const state = store.get(id);
if ((0, _isautil.isUndefined)(state) || (0, _isautil.isUndefined)(value)) return (0, _error.storeError)('wrong', id);
store.set(id, value);
const idListeners = listeners.get(id);
idListeners === null || idListeners === void 0 ? void 0 : idListeners.forEach((listener)=>listener(value));
}
function clearState(id) {
if (!store.has(id)) return (0, _error.storeError)('wrong', id);
store.set(id, null);
}
function deleteState(id) {
if (!store.has(id)) return (0, _error.storeError)('wrong', id);
store.delete(id);
listeners.delete(id);
}
function hasState(id) {
return store.has(id);
}
function subscribe(id, listener) {
if (!store.has(id)) return (0, _error.storeError)('wrong', id);
var _listeners_get;
const idListeners = (_listeners_get = listeners.get(id)) !== null && _listeners_get !== void 0 ? _listeners_get : new Set();
idListeners.add(listener);
listeners.set(id, idListeners);
listener(getState(id)); // 초기 상태도 전달
return ()=>{
idListeners.delete(listener);
if (idListeners.size === 0) listeners.delete(id);
};
}
//# sourceMappingURL=store.js.map