46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import * as Token from 'token-types';
|
|
|
|
import * as util from '../common/Util.js';
|
|
import type { DataType } from './AsfObject.js';
|
|
|
|
export type AttributeParser = (buf: Uint8Array) => boolean | string | number | bigint | Uint8Array;
|
|
|
|
export function getParserForAttr(i: DataType): AttributeParser {
|
|
return attributeParsers[i];
|
|
}
|
|
|
|
export function parseUnicodeAttr(uint8Array: Uint8Array): string {
|
|
return util.stripNulls(util.decodeString(uint8Array, 'utf-16le'));
|
|
}
|
|
|
|
const attributeParsers: AttributeParser[] = [
|
|
parseUnicodeAttr,
|
|
parseByteArrayAttr,
|
|
parseBoolAttr,
|
|
parseDWordAttr,
|
|
parseQWordAttr,
|
|
parseWordAttr,
|
|
parseByteArrayAttr
|
|
];
|
|
|
|
function parseByteArrayAttr(buf: Uint8Array): Uint8Array {
|
|
return new Uint8Array(buf);
|
|
}
|
|
|
|
function parseBoolAttr(buf: Uint8Array, offset = 0): boolean {
|
|
return parseWordAttr(buf, offset) === 1;
|
|
}
|
|
|
|
function parseDWordAttr(buf: Uint8Array, offset = 0): number {
|
|
return Token.UINT32_LE.get(buf, offset);
|
|
}
|
|
|
|
function parseQWordAttr(buf: Uint8Array, offset = 0): bigint {
|
|
return Token.UINT64_LE.get(buf, offset);
|
|
}
|
|
|
|
function parseWordAttr(buf: Uint8Array, offset = 0): number {
|
|
return Token.UINT16_LE.get(buf, offset);
|
|
}
|
|
|