UNPKG

@rhyster/wow-casc-dbc

Version:

Fetch World of Warcraft data files from CASC and parse DBC/DB2 files.

58 lines (46 loc) 1.65 kB
/* eslint-disable @typescript-eslint/naming-convention */ const parseProductConfig = (text: string): Record<string, string>[] => { const lines = text.split(/\r?\n/); // First line contains field definitions. // Example: Name!STRING:0|Path!STRING:0|Hosts!STRING:0|Servers!STRING:0|ConfigPath!STRING:0 // Whitespace is replaced so that a field like 'Install Key' becomes 'InstallKey'. // This just improves coding readability when accessing the fields later on. const headers = lines[0] .split('|') .map((header) => header.split('!')[0].replace(' ', '')); const entries = lines .filter((line, index) => index > 0 && line.trim().length !== 0 && !line.startsWith('#')) .map((line) => { const node: Record<string, string> = {}; const entryFields = line.split('|'); for (let i = 0, n = entryFields.length; i < n; i += 1) { node[headers[i]] = entryFields[i]; } return node; }); return entries; }; interface Version { Region: string, BuildConfig: string, CDNConfig: string, KeyRing: string, BuildId: string, VersionsName: string, ProductConfig: string, } const parseProductVersions = ( text: string, ): Version[] => parseProductConfig(text) as unknown as Version[]; interface CDN { Name: string, Path: string, Hosts: string, Servers: string, ConfigPath: string, } const parseProductCDNs = ( text: string, ): CDN[] => parseProductConfig(text) as unknown as CDN[]; export { parseProductVersions, parseProductCDNs }; export type { Version };