@rhyster/wow-casc-dbc
Version:
Fetch World of Warcraft data files from CASC and parse DBC/DB2 files.
281 lines (270 loc) • 8.51 kB
text/typescript
interface HotfixEntry {
regionID: number;
pushID: number;
uniqueID: number;
tableHash: number;
recordID: number;
dataSize: number;
recordState: number;
data: Buffer;
}
declare class ADBReader {
build: number;
entries: HotfixEntry[];
tableEntries: Map<number, HotfixEntry[]>;
constructor(buffer: Buffer);
}
interface MissingKeyBlock {
offset: number;
size: number;
blockIndex: number;
keyName: string;
}
interface ArchiveIndex {
key: string;
size: number;
offset: number;
}
interface EncodingData {
eSpec: string[];
cKey2FileSize: Map<string, number>;
cKey2EKey: Map<string, string | string[]>;
eKey2ESpecIndex: Map<string, number>;
eKey2FileSize: Map<string, number>;
}
interface InstallTag {
name: string;
type: number;
files: boolean[];
}
interface InstallFile {
name: string;
hash: string;
size: number;
tags: InstallTag[];
}
interface InstallData {
tags: InstallTag[];
files: InstallFile[];
}
interface Version {
Region: string;
BuildConfig: string;
CDNConfig: string;
KeyRing: string;
BuildId: string;
VersionsName: string;
ProductConfig: string;
}
interface FileInfo {
cKey: string;
contentFlags: number;
localeFlags: number;
}
interface RootData {
fileDataID2CKey: Map<number, FileInfo[]>;
nameHash2FileDataID: Map<string, number>;
}
interface ClientPreloadData {
prefixes: string[];
archives: Map<string, ArchiveIndex>;
encoding: EncodingData;
rootFile: RootData;
install: InstallData;
}
interface FileFetchResultFull {
type: 'full';
buffer: Buffer;
blocks: undefined;
}
interface FileFetchResultPartial {
type: 'partial';
buffer: Buffer;
blocks: MissingKeyBlock[];
}
type FileFetchResult = FileFetchResultFull | FileFetchResultPartial;
declare enum LogLevel {
error = 0,
warn = 1,
info = 2,
debug = 3
}
declare class CASCClient {
readonly region: string;
readonly product: string;
readonly version: Version;
readonly name2FileDataID: Map<string, number>;
readonly keys: Map<string, Uint8Array<ArrayBufferLike>>;
preload?: ClientPreloadData;
static getProductVersion(region: string, product: string): Promise<Version | undefined>;
static LocaleFlags: {
readonly enUS: 2;
readonly koKR: 4;
readonly frFR: 16;
readonly deDE: 32;
readonly zhCN: 64;
readonly esES: 128;
readonly zhTW: 256;
readonly enGB: 512;
readonly esMX: 4096;
readonly ruRU: 8192;
readonly ptBR: 16384;
readonly itIT: 32768;
readonly ptPT: 65536;
};
static ContentFlags: {
readonly Install: 4;
readonly LoadOnWindows: 8;
readonly LoadOnMacOS: 16;
readonly x86_32: 32;
readonly x86_64: 64;
readonly LowViolence: 128;
readonly DoNotLoad: 256;
readonly UpdatePlugin: 2048;
readonly ARM64: 32768;
readonly Encrypted: 134217728;
readonly NoNameHash: 268435456;
readonly UncommonResolution: 536870912;
readonly Bundle: 1073741824;
readonly NoCompression: 2147483648;
};
static LogLevel: typeof LogLevel;
logLevel: LogLevel;
constructor(region: string, product: string, version: Version, logLevel?: LogLevel);
private log;
init(): Promise<void>;
loadRemoteListFile(): Promise<void>;
loadRemoteTACTKeys(): Promise<void>;
loadTACTKeys(): Promise<void>;
loadBroadcastTACTKeys(adb: ADBReader): void;
getFileDataIDByName(name: string): number | undefined;
getContentKeysByFileDataID(fileDataID: number): FileInfo[] | undefined;
getContentKeysFromInstall(name: string): InstallFile[] | undefined;
getFileByContentKey(cKey: string, allowMissingKey?: false): Promise<FileFetchResultFull>;
getFileByContentKey(cKey: string, allowMissingKey: true): Promise<FileFetchResult>;
}
interface FieldStructure {
size: number;
position: number;
}
interface FieldStorageInfoCompressionNone {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'none';
}
interface FieldStorageInfoCompressionBitpacked {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'bitpacked';
bitpackingOffsetBits: number;
bitpackingSizeBits: number;
flags: number;
}
interface FieldStorageInfoCompressionCommonData {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'commonData';
defaultValue: number;
}
interface FieldStorageInfoCompressionBitpackedIndexed {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'bitpackedIndexed';
bitpackingOffsetBits: number;
bitpackingSizeBits: number;
}
interface FieldStorageInfoCompressionBitpackedIndexedArray {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'bitpackedIndexedArray';
bitpackingOffsetBits: number;
bitpackingSizeBits: number;
arrayCount: number;
}
interface FieldStorageInfoCompressionBitpackedSigned {
fieldOffsetBits: number;
fieldSizeBits: number;
additionalDataSize: number;
storageType: 'bitpackedSigned';
bitpackingOffsetBits: number;
bitpackingSizeBits: number;
flags: number;
}
type FieldStorageInfo = FieldStorageInfoCompressionNone | FieldStorageInfoCompressionBitpacked | FieldStorageInfoCompressionCommonData | FieldStorageInfoCompressionBitpackedIndexed | FieldStorageInfoCompressionBitpackedIndexedArray | FieldStorageInfoCompressionBitpackedSigned;
interface ParsedFieldNone {
type: 'none';
data: number | bigint;
string?: string;
}
interface ParsedFieldCommonData {
type: 'commonData';
data: number;
}
interface ParsedFieldBitpacked {
type: 'bitpacked';
data: number;
}
interface ParsedFieldBitpackedArray {
type: 'bitpackedArray';
data: number[];
}
type ParsedField = ParsedFieldNone | ParsedFieldCommonData | ParsedFieldBitpacked | ParsedFieldBitpackedArray;
interface SparseRow {
type: 'sparse';
data: Buffer;
}
interface HotfixModify {
type: 'modify';
data: Buffer;
}
interface HotfixDelete {
type: 'delete';
}
type Hotfix = HotfixModify | HotfixDelete;
declare class WDCReader {
readonly tableHash: number;
readonly layoutHash: number;
readonly locale: number;
readonly isNormal: boolean;
readonly hasRelationshipData: boolean;
readonly fields: FieldStructure[];
readonly fieldsInfo: FieldStorageInfo[];
readonly rows: Map<number, SparseRow | ParsedField[]>;
readonly relationships: Map<number, number>;
readonly copyTable: Map<number, number>;
readonly hotfixes: Map<number, Hotfix>;
constructor(buffer: Buffer, blocks?: MissingKeyBlock[], adb?: ADBReader);
getAllIDs(): number[];
getRowData(id: number): ParsedField[] | SparseRow | undefined;
getRowRelationship(id: number): number | undefined;
}
interface Column {
name: string;
type: string;
isID: boolean;
isInline: boolean;
isRelation: boolean;
isSigned: boolean;
size?: number;
arraySize?: number;
}
type BasicColumnData = number | bigint | string | undefined;
type ColumnData = BasicColumnData | BasicColumnData[];
declare class DBDParser {
readonly wdc: WDCReader;
readonly definitions: Map<string, string>;
columns: Column[];
private cache;
private constructor();
private init;
static parse(wdc: WDCReader): Promise<DBDParser>;
getAllIDs(): number[];
getRowData(id: number): Record<string, ColumnData> | undefined;
}
export { ADBReader, CASCClient, DBDParser, WDCReader };
export type { ArchiveIndex, BasicColumnData, ClientPreloadData, Column, ColumnData, EncodingData, FieldStorageInfo, FieldStorageInfoCompressionBitpacked, FieldStorageInfoCompressionBitpackedIndexed, FieldStorageInfoCompressionBitpackedIndexedArray, FieldStorageInfoCompressionBitpackedSigned, FieldStorageInfoCompressionCommonData, FieldStorageInfoCompressionNone, FieldStructure, FileFetchResult, FileFetchResultFull, FileFetchResultPartial, FileInfo, Hotfix, HotfixDelete, HotfixEntry, HotfixModify, InstallData, InstallFile, MissingKeyBlock, ParsedField, ParsedFieldBitpacked, ParsedFieldBitpackedArray, ParsedFieldCommonData, ParsedFieldNone, RootData, SparseRow, Version };