openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
49 lines (48 loc) • 1.73 kB
JavaScript
import { o as __toESM } from "./chunk-CNf5ZN-e.js";
import { t as require_src } from "./src-6PhJB9jV.js";
import { n as EndOfStreamError } from "./lib-X3TAZBh2.js";
import { t as BasicParser } from "./BasicParser-CSYy5xVJ.js";
import { r as ID3v2Header } from "./ID3v2Token-Vj5Brwlp.js";
import { n as ID3v1Parser } from "./ID3v1Parser-BDoQ48nd.js";
import { t as ID3v2Parser } from "./ID3v2Parser-QOk8QoNp.js";
const debug = (0, (/* @__PURE__ */ __toESM(require_src(), 1)).default)("music-metadata:parser:ID3");
/**
* Abstract parser which tries take ID3v2 and ID3v1 headers.
*/
var AbstractID3Parser = class extends BasicParser {
constructor() {
super(...arguments);
this.id3parser = new ID3v2Parser();
}
static async startsWithID3v2Header(tokenizer) {
return (await tokenizer.peekToken(ID3v2Header)).fileIdentifier === "ID3";
}
async parse() {
try {
await this.parseID3v2();
} catch (err) {
if (err instanceof EndOfStreamError) debug("End-of-stream");
else throw err;
}
}
finalize() {}
async parseID3v2() {
await this.tryReadId3v2Headers();
debug("End of ID3v2 header, go to MPEG-parser: pos=%s", this.tokenizer.position);
await this.postId3v2Parse();
if (this.options.skipPostHeaders && this.metadata.hasAny()) this.finalize();
else {
await new ID3v1Parser(this.metadata, this.tokenizer, this.options).parse();
this.finalize();
}
}
async tryReadId3v2Headers() {
if ((await this.tokenizer.peekToken(ID3v2Header)).fileIdentifier === "ID3") {
debug("Found ID3v2 header, pos=%s", this.tokenizer.position);
await this.id3parser.parse(this.metadata, this.tokenizer, this.options);
return this.tryReadId3v2Headers();
}
}
};
//#endregion
export { AbstractID3Parser as t };