UNPKG

@dschu012/casclib

Version:
77 lines (62 loc) 2.29 kB
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) }