Co-authored-by: Vivek R <123vivekr@gmail.com> Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
export const createMapper = <
|
|
LocalIDType extends string | number,
|
|
BackendIDType extends string | number
|
|
>() => {
|
|
const backendIDByLocalIDMap = new Map<
|
|
LocalIDType,
|
|
BackendIDType | undefined
|
|
>()
|
|
const localIDByBackendIDMap = new Map<
|
|
BackendIDType,
|
|
LocalIDType | undefined
|
|
>()
|
|
|
|
return {
|
|
addEntry(localIdentifier: LocalIDType, backendIdentifier: BackendIDType) {
|
|
backendIDByLocalIDMap.set(localIdentifier, backendIdentifier)
|
|
localIDByBackendIDMap.set(backendIdentifier, localIdentifier)
|
|
},
|
|
getValue() {
|
|
return backendIDByLocalIDMap
|
|
},
|
|
getBackendIDByLocalID(localIdentifier: LocalIDType) {
|
|
return backendIDByLocalIDMap.get(localIdentifier)
|
|
},
|
|
getLocalIDByBackendID(backendId: BackendIDType) {
|
|
return localIDByBackendIDMap.get(backendId)
|
|
},
|
|
removeEntry(backendId?: BackendIDType, index?: LocalIDType) {
|
|
if (backendId) {
|
|
const index = localIDByBackendIDMap.get(backendId)
|
|
|
|
localIDByBackendIDMap.delete(backendId)
|
|
index && backendIDByLocalIDMap.delete(index)
|
|
} else if (index) {
|
|
const backendId = backendIDByLocalIDMap.get(index)
|
|
|
|
backendIDByLocalIDMap.delete(index)
|
|
backendId && localIDByBackendIDMap.delete(backendId)
|
|
}
|
|
},
|
|
}
|
|
}
|