@dschu012/casclib
Version:
CascLib node bindings
77 lines (62 loc) • 2.29 kB
text/typescript
const addon = require('../build/Release/casclib-native')
export const LOCALES = Object.keys(addon.locales)
export type GameName =
"Heroes of the Storm" |
"World of Warcraft" |
"Diablo 3" |
"Overwatch" |
"Starcraft" |
"Starcraft II" |
"Unknown"
export interface AddonStorageInfo {
fileCount: number
gameName: GameName
gameBuild: number,
installedLocales: number,
}
export interface StorageInfo {
fileCount: number
gameName: GameName
gameBuild: number,
installedLocales: string[],
}
export type OpenStorageCallback = (error: Error, storageHandle: any) => void
function localeMaskToList(localeMask: number): string[] {
return Object.entries(addon.locales as { [name: string]: number })
.filter(([name, mask]) => name !== 'ALL' && (localeMask & mask) !== 0)
.map(([name, mask]) => name)
}
function localesToMask(locales: string[]): number {
let mask = 0;
locales.forEach(name => mask |= addon.locales[name])
return mask
}
export function openStorageSync(path: string, locales: string[] = [ 'ALL' ]) {
return addon.openCascStorageSync(path, localesToMask(locales))
}
export function openStorage(path: string): Promise<any>
export function openStorage(path: string, locales: string[]): Promise<any>
export function openStorage(path: string, callback: OpenStorageCallback): null
export function openStorage(path: string, locales: string[], callback: OpenStorageCallback): null
export function openStorage(path: string, localesOrCallback: string[] | OpenStorageCallback = [ 'ALL' ], callback?: OpenStorageCallback): null | Promise<any> {
let locales = [ 'ALL' ]
if(Array.isArray(localesOrCallback)) {
locales = localesOrCallback
}
else {
callback = localesOrCallback
}
return addon.openCascStorage(path, localesToMask(locales), callback)
}
export function getStorageInfo(storageHandle: any): StorageInfo {
const info = addon.getCascStorageInfo(storageHandle) as AddonStorageInfo
return {
fileCount: info.fileCount,
gameName: info.gameName,
gameBuild: info.gameBuild,
installedLocales: localeMaskToList(info.installedLocales),
}
}
export function closeStorage(storageHandle: any) {
addon.closeCascStorage(storageHandle)
}