@dan-uni/dan-any 2.2.5 → 2.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +25 -25
  2. package/dist/adapters-BVxXwTH3.js +2 -0
  3. package/dist/adapters-BVxXwTH3.js.map +1 -0
  4. package/dist/adapters.d.ts +1 -1
  5. package/dist/adapters.js +1 -1
  6. package/dist/core/db/schema.d.ts +1 -1
  7. package/dist/core/db/schema.js.map +1 -1
  8. package/dist/core/db/utils.d.ts +1 -1
  9. package/dist/core/main/drizzle.d.ts +3 -3
  10. package/dist/core/main/drizzle.js +1 -1
  11. package/dist/core/main/pure.d.ts +1 -1
  12. package/dist/core/main/pure.js +1 -1
  13. package/dist/core/main.d.ts +1 -1
  14. package/dist/core/main.js +1 -1
  15. package/dist/core-Czw41GuZ.js +2 -0
  16. package/dist/{core-D1XUOSXa.js.map → core-Czw41GuZ.js.map} +1 -1
  17. package/dist/core.d.ts +3 -3
  18. package/dist/core.js +1 -1
  19. package/dist/db-CK9ddboZ.js.map +1 -1
  20. package/dist/{dm-extra--BY805J3.d.ts → dm-extra-8pmLcNuD.d.ts} +10 -2
  21. package/dist/dm-extra-8pmLcNuD.d.ts.map +1 -0
  22. package/dist/{index-DPxMOW6E.d.ts → index-CyibNSYQ.d.ts} +3 -3
  23. package/dist/{index-DPxMOW6E.d.ts.map → index-CyibNSYQ.d.ts.map} +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/{isSame-MiM4wHvK.js → isSame-qVNOZKCK.js} +2 -2
  27. package/dist/{isSame-MiM4wHvK.js.map → isSame-qVNOZKCK.js.map} +1 -1
  28. package/dist/main-drizzle-DckK-VtK.js +2 -0
  29. package/dist/{main-drizzle-QIklYdJq.js.map → main-drizzle-DckK-VtK.js.map} +1 -1
  30. package/dist/{main-pure-BVFJVQIq.d.ts → main-pure-DkKNyAz1.d.ts} +2 -2
  31. package/dist/{main-pure-BVFJVQIq.d.ts.map → main-pure-DkKNyAz1.d.ts.map} +1 -1
  32. package/dist/main-pure-XcZ6DaLR.js +2 -0
  33. package/dist/{main-pure-BTqDH2ll.js.map → main-pure-XcZ6DaLR.js.map} +1 -1
  34. package/dist/plugins.d.ts +67 -4
  35. package/dist/plugins.d.ts.map +1 -1
  36. package/dist/plugins.js +1 -1
  37. package/dist/plugins.js.map +1 -1
  38. package/dist/{schema-B08Jk3HR.d.ts → schema-D_OmIr-T.d.ts} +2 -2
  39. package/dist/{schema-B08Jk3HR.d.ts.map → schema-D_OmIr-T.d.ts.map} +1 -1
  40. package/dist/utils.d.ts +2 -2
  41. package/dist/utils.js +1 -1
  42. package/dist/utils.js.map +1 -1
  43. package/package.json +12 -12
  44. package/dist/adapters-n4ZeTSYX.js +0 -2
  45. package/dist/adapters-n4ZeTSYX.js.map +0 -1
  46. package/dist/core-D1XUOSXa.js +0 -2
  47. package/dist/dm-extra--BY805J3.d.ts.map +0 -1
  48. package/dist/main-drizzle-QIklYdJq.js +0 -2
  49. package/dist/main-pure-BTqDH2ll.js +0 -2
  50. /package/dist/{chunk-DK3Fl9T5.js → rolldown-runtime-DK3Fl9T5.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"main-pure-BTqDH2ll.js","names":["#freeSerials","#nextSerial","#map"],"sources":["../src/utils/serialMap.ts","../src/core/main-pure.ts"],"sourcesContent":["type innerSerialMap<V> = Map<number, V>;\nexport class SerialMap<V> implements Map<number, V> {\n #map = new Map<number, V>();\n #freeSerials: number[] = [];\n #nextSerial: number = 0;\n get nextSerial(): number {\n if (this.#freeSerials.length > 0) return this.#freeSerials.shift()!;\n else return this.#nextSerial++;\n }\n add(value: V) {\n this.#map.set(this.nextSerial, value);\n return this;\n }\n delete(serial: number) {\n const existed = this.#map.delete(serial);\n if (existed) this.#freeSerials.push(serial);\n return existed;\n }\n clear() {\n this.#map.clear();\n this.#freeSerials = [];\n this.#nextSerial = 0;\n }\n toJSON() {\n return {\n $typeName: \"SerialMap\",\n \"#map\": this.#map.entries().toArray(),\n \"#freeSerials\": this.#freeSerials,\n \"#nextSerial\": this.#nextSerial,\n };\n }\n static fromJSON<V>(data: ReturnType<SerialMap<V>[\"toJSON\"]>): SerialMap<V> {\n if (data.$typeName !== \"SerialMap\") throw new Error(\"Invalid data for SerialMap\");\n const map = new SerialMap<V>();\n map.#map = new Map<number, V>(data[\"#map\"]);\n map.#freeSerials = data[\"#freeSerials\"];\n map.#nextSerial = data[\"#nextSerial\"];\n return map;\n }\n get size() {\n return this.#map.size;\n }\n has(...args: Parameters<innerSerialMap<V>[\"has\"]>) {\n return this.#map.has(...args);\n }\n get(...args: Parameters<innerSerialMap<V>[\"get\"]>) {\n return this.#map.get(...args);\n }\n set(...args: Parameters<innerSerialMap<V>[\"set\"]>) {\n this.#map.set(...args);\n return this;\n }\n getOrInsert(...args: Parameters<innerSerialMap<V>[\"getOrInsert\"]>) {\n return this.#map.getOrInsert(...args);\n }\n getOrInsertComputed(...args: Parameters<innerSerialMap<V>[\"getOrInsertComputed\"]>) {\n return this.#map.getOrInsertComputed(...args);\n }\n forEach(...args: Parameters<innerSerialMap<V>[\"forEach\"]>) {\n return this.#map.forEach(...args);\n }\n keys(...args: Parameters<innerSerialMap<V>[\"keys\"]>) {\n return this.#map.keys(...args);\n }\n values(...args: Parameters<innerSerialMap<V>[\"values\"]>) {\n return this.#map.values(...args);\n }\n entries(...args: Parameters<innerSerialMap<V>[\"entries\"]>) {\n return this.#map.entries(...args);\n }\n [Symbol.iterator]() {\n return this.#map[Symbol.iterator]();\n }\n get [Symbol.toStringTag]() {\n return \"SerialMap\";\n }\n}\n\ntype innerBigSerialMap<V> = Map<bigint, V>;\nexport class BigSerialMap<V> implements Map<bigint, V> {\n #map = new Map<bigint, V>();\n #freeSerials: bigint[] = [];\n #nextSerial: bigint = 0n;\n get nextSerial(): bigint {\n if (this.#freeSerials.length > 0) return this.#freeSerials.shift()!;\n else return this.#nextSerial++;\n }\n add(value: V) {\n this.#map.set(this.nextSerial, value);\n return this;\n }\n delete(serial: bigint) {\n const existed = this.#map.delete(serial);\n if (existed) this.#freeSerials.push(serial);\n return existed;\n }\n clear() {\n this.#map.clear();\n this.#freeSerials = [];\n this.#nextSerial = 0n;\n }\n toJSON() {\n return {\n $typeName: \"BigSerialMap\",\n \"#map\": this.#map\n .entries()\n .map(([k, v]) => [k.toString(), v] as [string, V])\n .toArray(),\n \"#freeSerials\": this.#freeSerials.map((s) => s.toString()),\n \"#nextSerial\": this.#nextSerial.toString(),\n };\n }\n static fromJSON<V>(data: ReturnType<BigSerialMap<V>[\"toJSON\"]>): BigSerialMap<V> {\n if (data.$typeName !== \"BigSerialMap\") throw new Error(\"Invalid data for BigSerialMap\");\n const map = new BigSerialMap<V>();\n map.#map = new Map<bigint, V>(data[\"#map\"].map(([k, v]) => [BigInt(k), v]));\n map.#freeSerials = data[\"#freeSerials\"].map(BigInt);\n map.#nextSerial = BigInt(data[\"#nextSerial\"]);\n return map;\n }\n get size() {\n return this.#map.size;\n }\n has(...args: Parameters<innerBigSerialMap<V>[\"has\"]>) {\n return this.#map.has(...args);\n }\n get(...args: Parameters<innerBigSerialMap<V>[\"get\"]>) {\n return this.#map.get(...args);\n }\n set(...args: Parameters<innerBigSerialMap<V>[\"set\"]>) {\n this.#map.set(...args);\n return this;\n }\n getOrInsert(...args: Parameters<innerBigSerialMap<V>[\"getOrInsert\"]>) {\n return this.#map.getOrInsert(...args);\n }\n getOrInsertComputed(...args: Parameters<innerBigSerialMap<V>[\"getOrInsertComputed\"]>) {\n return this.#map.getOrInsertComputed(...args);\n }\n forEach(...args: Parameters<innerBigSerialMap<V>[\"forEach\"]>) {\n return this.#map.forEach(...args);\n }\n keys(...args: Parameters<innerBigSerialMap<V>[\"keys\"]>) {\n return this.#map.keys(...args);\n }\n values(...args: Parameters<innerBigSerialMap<V>[\"values\"]>) {\n return this.#map.values(...args);\n }\n entries(...args: Parameters<innerBigSerialMap<V>[\"entries\"]>) {\n return this.#map.entries(...args);\n }\n [Symbol.iterator]() {\n return this.#map[Symbol.iterator]();\n }\n get [Symbol.toStringTag]() {\n return \"BigSerialMap\";\n }\n}\n","import { createDMID, type DMIDGenerator } from \"./id.ts\";\nimport * as base from \"./index.ts\";\nimport type { Plugin, Transformer, TransformerInput } from \"@/adapters/index.ts\";\nimport type { Asyncify, Promisable, Simplify } from \"type-fest\";\nimport { BigSerialMap, SerialMap } from \"@/utils/serialMap.ts\";\n\ntype baseClassTrans<T> = base.baseClassTrans<T, UniDB, InitedUniDB, UniChunk>;\n\ninterface UJson {\n danmakus: base.UDanmaku[];\n chunks: ReturnType<SerialMap<base.UChunk>[\"toJSON\"]>;\n chunk2danmakus: ReturnType<BigSerialMap<base.UChunk2Danmaku>[\"toJSON\"]>;\n}\n\ninterface UMaps {\n danmakus: Map<string, base.UDanmaku>;\n chunks: SerialMap<base.UChunk>;\n chunk2danmakus: BigSerialMap<base.UChunk2Danmaku>;\n}\n\nconst emptyDB: UMaps = {\n danmakus: new Map(),\n chunks: new SerialMap(),\n chunk2danmakus: new BigSerialMap(),\n};\nexport function initNewDb() {\n return { ...emptyDB };\n}\n\nexport class UniDB implements base.UniDB {\n __isUniDB = true;\n constructor(\n public $db: UMaps = emptyDB,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {}\n init($json?: UJson) {\n if ($json)\n this.$db = {\n danmakus: new Map($json.danmakus.map((d) => [d.DMID, d])),\n chunks: SerialMap.fromJSON($json.chunks),\n chunk2danmakus: BigSerialMap.fromJSON($json.chunk2danmakus),\n };\n else this.$db = emptyDB;\n return new InitedUniDB(this.$db, this.DMIDGenerator);\n }\n close() {\n this.$db = { danmakus: new Map(), chunks: new SerialMap(), chunk2danmakus: new BigSerialMap() };\n }\n}\n\nfunction $Private4InitedUniDB_upsertDanmakus(that: InitedUniDB, data: base.DanmakusInsert[]) {\n data.forEach((d) => {\n const rawContent = d.content;\n // oxlint-disable-next-line no-control-regex\n d.content = rawContent.replace(/[\\x00-\\x1F\\x7F]/g, \"\");\n if (d.content !== rawContent)\n d.extra = {\n ...d.extra,\n danuni: {\n ...d.extra?.danuni,\n raw: {\n ...d.extra?.danuni?.raw,\n content: Buffer.from(rawContent, \"utf8\").toString(\"base64\"),\n },\n },\n };\n that.$db.danmakus.set(d.DMID, { ...d, platform: d.platform ?? null });\n });\n}\n\nexport class InitedUniDB extends UniDB implements base.InitedUniDB {\n __isInitedUniDB = true;\n constructor(\n public $db: UMaps,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {\n super($db, DMIDGenerator);\n }\n dump(): UJson {\n return {\n danmakus: [...this.$db.danmakus.values()],\n chunks: this.$db.chunks.toJSON(),\n chunk2danmakus: this.$db.chunk2danmakus.toJSON(),\n };\n }\n get $chunks() {\n return [...this.$db.chunks.values()];\n }\n get $danmakus() {\n return [...this.$db.danmakus.values()];\n }\n listChunks() {\n const cs = this.$chunks;\n return cs.map((c) => new UniChunk(this, c.id));\n }\n makeChunk(data: Omit<base.ChunksInsert, \"id\">) {\n const newID = this.$db.chunks.nextSerial;\n this.$db.chunks.set(newID, {\n id: newID,\n fromConverted: data.fromConverted ?? false,\n tmp: data.tmp ?? false,\n });\n return new UniChunk(this, newID);\n }\n upsertDanmakus(\n data: base.DanmakusInsert[] | Map<string, base.DanmakusInsert>,\n dedupeDMID = true,\n ) {\n if (data instanceof Map) this.upsertDanmakus([...data.values()], false);\n else if (dedupeDMID) {\n const map = new Map<string, base.DanmakusInsert>();\n data.forEach((d) => {\n map.set(d.DMID, d);\n });\n $Private4InitedUniDB_upsertDanmakus(this, [...map.values()]);\n } else $Private4InitedUniDB_upsertDanmakus(this, data);\n }\n /**\n * 清理临时chunks\n */\n shrink() {\n const uchunks = this.$db.chunks.values().filter((c) => c.tmp);\n for (const c of uchunks) new UniChunk(this, c.id).delete();\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this);\n }\n export<T extends Transformer>(transformer: T): ReturnType<T>;\n async export<T extends Asyncify<Transformer>>(transformer: T): Promise<ReturnType<T>>;\n export<T extends Transformer | Asyncify<Transformer>>(transformer: T): Promisable<ReturnType<T>> {\n return <ReturnType<T>>transformer(this.$danmakus, { DMIDGenerator: this.DMIDGenerator });\n }\n}\n\nexport class UniChunk implements base.UniChunk {\n __isUniChunk = true;\n constructor(\n public $UniDB: InitedUniDB,\n public id: number,\n ) {}\n get $db() {\n return this.$UniDB.$db;\n }\n static makeChunk(u: TransformerInput<InitedUniDB | UniChunk>, data: base.ChunksInsert): UniChunk {\n return u instanceof InitedUniDB ? u.makeChunk(data) : u.$UniDB.makeChunk(data);\n }\n /**\n * 合并弹幕库\n * @description 将多个chunk的弹幕合并到base chunk中,合并后原chunk会被删除\n * @param base 目标chunk,合并后其他chunk的弹幕会被移到这个chunk中\n * @param chunks 待合并的chunk列表,这些chunk中的弹幕会被移到base chunk中,合并后这些chunk会被删除\n * @returns 合并后的目标chunk实例\n * @throws 如果chunks列表为空,函数会直接返回base chunk;如果目标chunk在数据库中未找到,会抛出错误;如果chunks中有来自不同数据库的chunk且options.allowDifferentDB为false,也会抛出错误\n */\n static assign(base: UniChunk, chunks: UniChunk[]) {\n if (chunks.length < 1) return base;\n const targetId = base.id;\n const targetRow = base.$chunk();\n let newFromConverted = targetRow.fromConverted;\n for (const c of chunks) {\n const srcChunkRow = c.$chunk();\n newFromConverted = newFromConverted && !!srcChunkRow.fromConverted;\n base.upsertDanmakus(c.$danmakus, false);\n c.delete();\n }\n base.$db.chunks.set(targetId, { ...targetRow, fromConverted: newFromConverted });\n return new UniChunk(base.$UniDB, targetId);\n }\n /**\n * 比较两个chunk的弹幕是否相同\n * @description 可用于跨DB比较\n */\n static compare(u1: UniChunk, u2: UniChunk) {\n const dms1 = u1.$danmakus;\n const dms2 = u2.$danmakus;\n if (dms1.length !== dms2.length) return false;\n const dmidSet = new Set<string>();\n for (const dm of dms1) {\n dmidSet.add(dm.DMID);\n }\n for (const dm of dms2) {\n const target = dmidSet.has(dm.DMID);\n if (!target) return false;\n if (JSON.stringify(target) !== JSON.stringify(dm)) return false;\n }\n return true;\n }\n get $chunks() {\n const chunk = this.$db.chunks.get(this.id);\n return chunk ? [chunk] : [];\n }\n $chunk() {\n const c = this.$chunks;\n return c[0];\n }\n get $danmakus() {\n const c2d = this.$db.chunk2danmakus.values().filter((cd) => cd.chunkID === this.id);\n const ds = c2d\n .map((cd) => this.$db.danmakus.get(cd.DMID))\n .filter((d): d is base.UDanmaku => !!d);\n return [...ds];\n }\n get $count() {\n const c2d = this.$db.chunk2danmakus.values().filter((cd) => cd.chunkID === this.id);\n return c2d.reduce((acc) => acc + 1, 0);\n }\n get isDeleted() {\n return !this.$db.chunks.has(this.id);\n }\n upsertDanmakus(\n data: Map<string, base.DanmakusInsert & { platform: string | null }>,\n autoSetDMID?: false,\n dedupeDMID?: false,\n ): void;\n upsertDanmakus(\n data: Simplify<base.DanmakusInsert & { DMID: string; platform: string | null }>[],\n autoSetDMID?: false,\n dedupeDMID?: boolean,\n ): void;\n upsertDanmakus(\n data: Simplify<base.DanmakusInsert & { DMID?: undefined }>[],\n autoSetDMID: true,\n dedupeDMID?: true,\n ): void;\n upsertDanmakus(\n data:\n | (base.DanmakusInsert & { DMID?: string; platform: string | null })[]\n | Map<string, base.DanmakusInsert & { platform: string | null }>,\n autoSetDMID = false,\n dedupeDMID = true,\n ) {\n const dmids = new Set<string>();\n if (data instanceof Map) {\n this.$UniDB.upsertDanmakus([...data.values()], false);\n data.forEach((d) => dmids.add(d.DMID));\n } else {\n if (autoSetDMID)\n data = data.map((d) => {\n const DMID = this.$UniDB.DMIDGenerator(d);\n dmids.add(DMID);\n return { ...d, DMID };\n });\n else\n data.forEach((d) => {\n dmids.add(d.DMID!);\n });\n this.$UniDB.upsertDanmakus(data, dedupeDMID);\n }\n dmids.forEach((dmid) => {\n const chunk2danmakuID = this.$db.chunk2danmakus.nextSerial;\n this.$db.chunk2danmakus.set(chunk2danmakuID, {\n id: chunk2danmakuID,\n chunkID: this.id,\n DMID: dmid,\n });\n });\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this.$UniDB, this);\n }\n export<T extends Transformer>(transformer: T): ReturnType<T>;\n async export<T extends Asyncify<Transformer>>(transformer: T): Promise<ReturnType<T>>;\n export<T extends Transformer | Asyncify<Transformer>>(transformer: T): Promisable<ReturnType<T>> {\n // transformer 格式转换器 不应对数据库执行任何写操作\n return <ReturnType<T>>transformer(this.$danmakus, {\n DMIDGenerator: this.$UniDB.DMIDGenerator,\n uchunk: this.$chunk(),\n });\n }\n plugin<T extends Plugin>(plugin: T): baseClassTrans<ReturnType<T>>;\n plugin<T extends Asyncify<Plugin>>(plugin: T): Promise<baseClassTrans<ReturnType<T>>>;\n plugin<T extends Plugin | Asyncify<Plugin>>(\n plugin: T,\n ): Promisable<baseClassTrans<ReturnType<T>>> {\n const output = <baseClassTrans<ReturnType<T>>>plugin(this);\n return output;\n }\n delete() {\n const DMIDs = new Set<string>();\n this.$db.chunk2danmakus.forEach((cd) => {\n if (cd.chunkID === this.id) {\n DMIDs.add(cd.DMID);\n this.$db.chunk2danmakus.delete(cd.id);\n }\n });\n // 对于不再被任何 chunk 引用的弹幕,删除它们\n DMIDs.forEach((dmid) => {\n const still = this.$db.chunk2danmakus.values().some((cd) => cd.DMID === dmid);\n if (!still) this.$db.danmakus.delete(dmid);\n });\n this.$db.chunks.delete(this.id);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"main-pure-XcZ6DaLR.js","names":["#freeSerials","#nextSerial","#map"],"sources":["../src/utils/serialMap.ts","../src/core/main-pure.ts"],"sourcesContent":["type innerSerialMap<V> = Map<number, V>;\nexport class SerialMap<V> implements Map<number, V> {\n #map = new Map<number, V>();\n #freeSerials: number[] = [];\n #nextSerial: number = 0;\n get nextSerial(): number {\n if (this.#freeSerials.length > 0) return this.#freeSerials.shift()!;\n else return this.#nextSerial++;\n }\n add(value: V) {\n this.#map.set(this.nextSerial, value);\n return this;\n }\n delete(serial: number) {\n const existed = this.#map.delete(serial);\n if (existed) this.#freeSerials.push(serial);\n return existed;\n }\n clear() {\n this.#map.clear();\n this.#freeSerials = [];\n this.#nextSerial = 0;\n }\n toJSON() {\n return {\n $typeName: \"SerialMap\",\n \"#map\": this.#map.entries().toArray(),\n \"#freeSerials\": this.#freeSerials,\n \"#nextSerial\": this.#nextSerial,\n };\n }\n static fromJSON<V>(data: ReturnType<SerialMap<V>[\"toJSON\"]>): SerialMap<V> {\n if (data.$typeName !== \"SerialMap\") throw new Error(\"Invalid data for SerialMap\");\n const map = new SerialMap<V>();\n map.#map = new Map<number, V>(data[\"#map\"]);\n map.#freeSerials = data[\"#freeSerials\"];\n map.#nextSerial = data[\"#nextSerial\"];\n return map;\n }\n get size() {\n return this.#map.size;\n }\n has(...args: Parameters<innerSerialMap<V>[\"has\"]>) {\n return this.#map.has(...args);\n }\n get(...args: Parameters<innerSerialMap<V>[\"get\"]>) {\n return this.#map.get(...args);\n }\n set(...args: Parameters<innerSerialMap<V>[\"set\"]>) {\n this.#map.set(...args);\n return this;\n }\n getOrInsert(...args: Parameters<innerSerialMap<V>[\"getOrInsert\"]>) {\n return this.#map.getOrInsert(...args);\n }\n getOrInsertComputed(...args: Parameters<innerSerialMap<V>[\"getOrInsertComputed\"]>) {\n return this.#map.getOrInsertComputed(...args);\n }\n forEach(...args: Parameters<innerSerialMap<V>[\"forEach\"]>) {\n return this.#map.forEach(...args);\n }\n keys(...args: Parameters<innerSerialMap<V>[\"keys\"]>) {\n return this.#map.keys(...args);\n }\n values(...args: Parameters<innerSerialMap<V>[\"values\"]>) {\n return this.#map.values(...args);\n }\n entries(...args: Parameters<innerSerialMap<V>[\"entries\"]>) {\n return this.#map.entries(...args);\n }\n [Symbol.iterator]() {\n return this.#map[Symbol.iterator]();\n }\n get [Symbol.toStringTag]() {\n return \"SerialMap\";\n }\n}\n\ntype innerBigSerialMap<V> = Map<bigint, V>;\nexport class BigSerialMap<V> implements Map<bigint, V> {\n #map = new Map<bigint, V>();\n #freeSerials: bigint[] = [];\n #nextSerial: bigint = 0n;\n get nextSerial(): bigint {\n if (this.#freeSerials.length > 0) return this.#freeSerials.shift()!;\n else return this.#nextSerial++;\n }\n add(value: V) {\n this.#map.set(this.nextSerial, value);\n return this;\n }\n delete(serial: bigint) {\n const existed = this.#map.delete(serial);\n if (existed) this.#freeSerials.push(serial);\n return existed;\n }\n clear() {\n this.#map.clear();\n this.#freeSerials = [];\n this.#nextSerial = 0n;\n }\n toJSON() {\n return {\n $typeName: \"BigSerialMap\",\n \"#map\": this.#map\n .entries()\n .map(([k, v]) => [k.toString(), v] as [string, V])\n .toArray(),\n \"#freeSerials\": this.#freeSerials.map((s) => s.toString()),\n \"#nextSerial\": this.#nextSerial.toString(),\n };\n }\n static fromJSON<V>(data: ReturnType<BigSerialMap<V>[\"toJSON\"]>): BigSerialMap<V> {\n if (data.$typeName !== \"BigSerialMap\") throw new Error(\"Invalid data for BigSerialMap\");\n const map = new BigSerialMap<V>();\n map.#map = new Map<bigint, V>(data[\"#map\"].map(([k, v]) => [BigInt(k), v]));\n map.#freeSerials = data[\"#freeSerials\"].map(BigInt);\n map.#nextSerial = BigInt(data[\"#nextSerial\"]);\n return map;\n }\n get size() {\n return this.#map.size;\n }\n has(...args: Parameters<innerBigSerialMap<V>[\"has\"]>) {\n return this.#map.has(...args);\n }\n get(...args: Parameters<innerBigSerialMap<V>[\"get\"]>) {\n return this.#map.get(...args);\n }\n set(...args: Parameters<innerBigSerialMap<V>[\"set\"]>) {\n this.#map.set(...args);\n return this;\n }\n getOrInsert(...args: Parameters<innerBigSerialMap<V>[\"getOrInsert\"]>) {\n return this.#map.getOrInsert(...args);\n }\n getOrInsertComputed(...args: Parameters<innerBigSerialMap<V>[\"getOrInsertComputed\"]>) {\n return this.#map.getOrInsertComputed(...args);\n }\n forEach(...args: Parameters<innerBigSerialMap<V>[\"forEach\"]>) {\n return this.#map.forEach(...args);\n }\n keys(...args: Parameters<innerBigSerialMap<V>[\"keys\"]>) {\n return this.#map.keys(...args);\n }\n values(...args: Parameters<innerBigSerialMap<V>[\"values\"]>) {\n return this.#map.values(...args);\n }\n entries(...args: Parameters<innerBigSerialMap<V>[\"entries\"]>) {\n return this.#map.entries(...args);\n }\n [Symbol.iterator]() {\n return this.#map[Symbol.iterator]();\n }\n get [Symbol.toStringTag]() {\n return \"BigSerialMap\";\n }\n}\n","import { createDMID, type DMIDGenerator } from \"./id.ts\";\nimport * as base from \"./index.ts\";\nimport type { Plugin, Transformer, TransformerInput } from \"@/adapters/index.ts\";\nimport type { Asyncify, Promisable, Simplify } from \"type-fest\";\nimport { BigSerialMap, SerialMap } from \"@/utils/serialMap.ts\";\n\ntype baseClassTrans<T> = base.baseClassTrans<T, UniDB, InitedUniDB, UniChunk>;\n\ninterface UJson {\n danmakus: base.UDanmaku[];\n chunks: ReturnType<SerialMap<base.UChunk>[\"toJSON\"]>;\n chunk2danmakus: ReturnType<BigSerialMap<base.UChunk2Danmaku>[\"toJSON\"]>;\n}\n\ninterface UMaps {\n danmakus: Map<string, base.UDanmaku>;\n chunks: SerialMap<base.UChunk>;\n chunk2danmakus: BigSerialMap<base.UChunk2Danmaku>;\n}\n\nconst emptyDB: UMaps = {\n danmakus: new Map(),\n chunks: new SerialMap(),\n chunk2danmakus: new BigSerialMap(),\n};\nexport function initNewDb() {\n return { ...emptyDB };\n}\n\nexport class UniDB implements base.UniDB {\n __isUniDB = true;\n constructor(\n public $db: UMaps = emptyDB,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {}\n init($json?: UJson) {\n if ($json)\n this.$db = {\n danmakus: new Map($json.danmakus.map((d) => [d.DMID, d])),\n chunks: SerialMap.fromJSON($json.chunks),\n chunk2danmakus: BigSerialMap.fromJSON($json.chunk2danmakus),\n };\n else this.$db = emptyDB;\n return new InitedUniDB(this.$db, this.DMIDGenerator);\n }\n close() {\n this.$db = { danmakus: new Map(), chunks: new SerialMap(), chunk2danmakus: new BigSerialMap() };\n }\n}\n\nfunction $Private4InitedUniDB_upsertDanmakus(that: InitedUniDB, data: base.DanmakusInsert[]) {\n data.forEach((d) => {\n const rawContent = d.content;\n // oxlint-disable-next-line no-control-regex\n d.content = rawContent.replace(/[\\x00-\\x1F\\x7F]/g, \"\");\n if (d.content !== rawContent)\n d.extra = {\n ...d.extra,\n danuni: {\n ...d.extra?.danuni,\n raw: {\n ...d.extra?.danuni?.raw,\n content: Buffer.from(rawContent, \"utf8\").toString(\"base64\"),\n },\n },\n };\n that.$db.danmakus.set(d.DMID, { ...d, platform: d.platform ?? null });\n });\n}\n\nexport class InitedUniDB extends UniDB implements base.InitedUniDB {\n __isInitedUniDB = true;\n constructor(\n public $db: UMaps,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {\n super($db, DMIDGenerator);\n }\n dump(): UJson {\n return {\n danmakus: [...this.$db.danmakus.values()],\n chunks: this.$db.chunks.toJSON(),\n chunk2danmakus: this.$db.chunk2danmakus.toJSON(),\n };\n }\n get $chunks() {\n return [...this.$db.chunks.values()];\n }\n get $danmakus() {\n return [...this.$db.danmakus.values()];\n }\n listChunks() {\n const cs = this.$chunks;\n return cs.map((c) => new UniChunk(this, c.id));\n }\n makeChunk(data: Omit<base.ChunksInsert, \"id\">) {\n const newID = this.$db.chunks.nextSerial;\n this.$db.chunks.set(newID, {\n id: newID,\n fromConverted: data.fromConverted ?? false,\n tmp: data.tmp ?? false,\n });\n return new UniChunk(this, newID);\n }\n upsertDanmakus(\n data: base.DanmakusInsert[] | Map<string, base.DanmakusInsert>,\n dedupeDMID = true,\n ) {\n if (data instanceof Map) this.upsertDanmakus([...data.values()], false);\n else if (dedupeDMID) {\n const map = new Map<string, base.DanmakusInsert>();\n data.forEach((d) => {\n map.set(d.DMID, d);\n });\n $Private4InitedUniDB_upsertDanmakus(this, [...map.values()]);\n } else $Private4InitedUniDB_upsertDanmakus(this, data);\n }\n /**\n * 清理临时chunks\n */\n shrink() {\n const uchunks = this.$db.chunks.values().filter((c) => c.tmp);\n for (const c of uchunks) new UniChunk(this, c.id).delete();\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this);\n }\n export<T extends Transformer>(transformer: T): ReturnType<T>;\n async export<T extends Asyncify<Transformer>>(transformer: T): Promise<ReturnType<T>>;\n export<T extends Transformer | Asyncify<Transformer>>(transformer: T): Promisable<ReturnType<T>> {\n return <ReturnType<T>>transformer(this.$danmakus, { DMIDGenerator: this.DMIDGenerator });\n }\n}\n\nexport class UniChunk implements base.UniChunk {\n __isUniChunk = true;\n constructor(\n public $UniDB: InitedUniDB,\n public id: number,\n ) {}\n get $db() {\n return this.$UniDB.$db;\n }\n static makeChunk(u: TransformerInput<InitedUniDB | UniChunk>, data: base.ChunksInsert): UniChunk {\n return u instanceof InitedUniDB ? u.makeChunk(data) : u.$UniDB.makeChunk(data);\n }\n /**\n * 合并弹幕库\n * @description 将多个chunk的弹幕合并到base chunk中,合并后原chunk会被删除\n * @param base 目标chunk,合并后其他chunk的弹幕会被移到这个chunk中\n * @param chunks 待合并的chunk列表,这些chunk中的弹幕会被移到base chunk中,合并后这些chunk会被删除\n * @returns 合并后的目标chunk实例\n * @throws 如果chunks列表为空,函数会直接返回base chunk;如果目标chunk在数据库中未找到,会抛出错误;如果chunks中有来自不同数据库的chunk且options.allowDifferentDB为false,也会抛出错误\n */\n static assign(base: UniChunk, chunks: UniChunk[]) {\n if (chunks.length < 1) return base;\n const targetId = base.id;\n const targetRow = base.$chunk();\n let newFromConverted = targetRow.fromConverted;\n for (const c of chunks) {\n const srcChunkRow = c.$chunk();\n newFromConverted = newFromConverted && !!srcChunkRow.fromConverted;\n base.upsertDanmakus(c.$danmakus, false);\n c.delete();\n }\n base.$db.chunks.set(targetId, { ...targetRow, fromConverted: newFromConverted });\n return new UniChunk(base.$UniDB, targetId);\n }\n /**\n * 比较两个chunk的弹幕是否相同\n * @description 可用于跨DB比较\n */\n static compare(u1: UniChunk, u2: UniChunk) {\n const dms1 = u1.$danmakus;\n const dms2 = u2.$danmakus;\n if (dms1.length !== dms2.length) return false;\n const dmidSet = new Set<string>();\n for (const dm of dms1) {\n dmidSet.add(dm.DMID);\n }\n for (const dm of dms2) {\n const target = dmidSet.has(dm.DMID);\n if (!target) return false;\n if (JSON.stringify(target) !== JSON.stringify(dm)) return false;\n }\n return true;\n }\n get $chunks() {\n const chunk = this.$db.chunks.get(this.id);\n return chunk ? [chunk] : [];\n }\n $chunk() {\n const c = this.$chunks;\n return c[0];\n }\n get $danmakus() {\n const c2d = this.$db.chunk2danmakus.values().filter((cd) => cd.chunkID === this.id);\n const ds = c2d\n .map((cd) => this.$db.danmakus.get(cd.DMID))\n .filter((d): d is base.UDanmaku => !!d);\n return [...ds];\n }\n get $count() {\n const c2d = this.$db.chunk2danmakus.values().filter((cd) => cd.chunkID === this.id);\n return c2d.reduce((acc) => acc + 1, 0);\n }\n get isDeleted() {\n return !this.$db.chunks.has(this.id);\n }\n upsertDanmakus(\n data: Map<string, base.DanmakusInsert & { platform: string | null }>,\n autoSetDMID?: false,\n dedupeDMID?: false,\n ): void;\n upsertDanmakus(\n data: Simplify<base.DanmakusInsert & { DMID: string; platform: string | null }>[],\n autoSetDMID?: false,\n dedupeDMID?: boolean,\n ): void;\n upsertDanmakus(\n data: Simplify<base.DanmakusInsert & { DMID?: undefined }>[],\n autoSetDMID: true,\n dedupeDMID?: true,\n ): void;\n upsertDanmakus(\n data:\n | (base.DanmakusInsert & { DMID?: string; platform: string | null })[]\n | Map<string, base.DanmakusInsert & { platform: string | null }>,\n autoSetDMID = false,\n dedupeDMID = true,\n ) {\n const dmids = new Set<string>();\n if (data instanceof Map) {\n this.$UniDB.upsertDanmakus([...data.values()], false);\n data.forEach((d) => dmids.add(d.DMID));\n } else {\n if (autoSetDMID)\n data = data.map((d) => {\n const DMID = this.$UniDB.DMIDGenerator(d);\n dmids.add(DMID);\n return { ...d, DMID };\n });\n else\n data.forEach((d) => {\n dmids.add(d.DMID!);\n });\n this.$UniDB.upsertDanmakus(data, dedupeDMID);\n }\n dmids.forEach((dmid) => {\n const chunk2danmakuID = this.$db.chunk2danmakus.nextSerial;\n this.$db.chunk2danmakus.set(chunk2danmakuID, {\n id: chunk2danmakuID,\n chunkID: this.id,\n DMID: dmid,\n });\n });\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this.$UniDB, this);\n }\n export<T extends Transformer>(transformer: T): ReturnType<T>;\n async export<T extends Asyncify<Transformer>>(transformer: T): Promise<ReturnType<T>>;\n export<T extends Transformer | Asyncify<Transformer>>(transformer: T): Promisable<ReturnType<T>> {\n // transformer 格式转换器 不应对数据库执行任何写操作\n return <ReturnType<T>>transformer(this.$danmakus, {\n DMIDGenerator: this.$UniDB.DMIDGenerator,\n uchunk: this.$chunk(),\n });\n }\n plugin<T extends Plugin>(plugin: T): baseClassTrans<ReturnType<T>>;\n plugin<T extends Asyncify<Plugin>>(plugin: T): Promise<baseClassTrans<ReturnType<T>>>;\n plugin<T extends Plugin | Asyncify<Plugin>>(\n plugin: T,\n ): Promisable<baseClassTrans<ReturnType<T>>> {\n const output = <baseClassTrans<ReturnType<T>>>plugin(this);\n return output;\n }\n delete() {\n const DMIDs = new Set<string>();\n this.$db.chunk2danmakus.forEach((cd) => {\n if (cd.chunkID === this.id) {\n DMIDs.add(cd.DMID);\n this.$db.chunk2danmakus.delete(cd.id);\n }\n });\n // 对于不再被任何 chunk 引用的弹幕,删除它们\n DMIDs.forEach((dmid) => {\n const still = this.$db.chunk2danmakus.values().some((cd) => cd.DMID === dmid);\n if (!still) this.$db.danmakus.delete(dmid);\n });\n this.$db.chunks.delete(this.id);\n }\n}\n"],"mappings":"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"}
package/dist/plugins.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as UDanmaku, et as UniChunk } from "./index-DPxMOW6E.js";
2
- import { t as Extra } from "./dm-extra--BY805J3.js";
1
+ import { $ as UDanmaku, et as UniChunk } from "./index-CyibNSYQ.js";
2
+ import { t as Extra } from "./dm-extra-8pmLcNuD.js";
3
3
  import { z } from "zod";
4
4
 
5
5
  //#region src/plugins/count.d.ts
@@ -65,6 +65,69 @@ declare function GetStatsUtil4getMost<T extends unknown>(statMap: Map<T, number>
65
65
  count: number;
66
66
  };
67
67
  //#endregion
68
+ //#region src/plugins/heatmap.d.ts
69
+ /**
70
+ * 热力图配置参数
71
+ */
72
+ interface HeatmapOptions {
73
+ /**
74
+ * 视频总时长(毫秒)
75
+ * - 默认:自动计算为所有弹幕中 progress 的最大值
76
+ * - 用途:确定热力图的时间范围上界
77
+ */
78
+ videoDuration?: number;
79
+ /**
80
+ * 时间粒度(毫秒)
81
+ * - 默认:1000(1秒)
82
+ * - 最小值:必须为正数
83
+ * - 用途:将时间轴划分为固定长度的采样点
84
+ */
85
+ granularity?: number;
86
+ }
87
+ /**
88
+ * 热力图数据点
89
+ */
90
+ interface HeatmapPoint {
91
+ /**
92
+ * 时间点(毫秒),表示该采样区间的起始时间
93
+ * @example 0, 1000, 2000, 3000...
94
+ */
95
+ time: number;
96
+ /**
97
+ * 该时间段内的弹幕数量
98
+ */
99
+ count: number;
100
+ }
101
+ /**
102
+ * 热力图转换器配置器
103
+ *
104
+ * @param options - 配置参数
105
+ * @returns Transformer 函数
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * // 使用默认配置(1秒粒度,自动计算视频长度)
110
+ * const heatmap = await chunk.export(HeatmapTransformerConfigurator());
111
+ *
112
+ * // 自定义配置
113
+ * const heatmap = await chunk.export(HeatmapTransformerConfigurator({
114
+ * videoDuration: 600000, // 10分钟
115
+ * granularity: 500 // 0.5秒
116
+ * }));
117
+ * ```
118
+ */
119
+ declare const HeatmapTransformerConfigurator: (options?: HeatmapOptions) => (udanmakus: UDanmaku[]) => HeatmapPoint[];
120
+ /**
121
+ * 工具函数:查找热力图中的峰值
122
+ *
123
+ * @param heatmap - 热力图数据
124
+ * @returns 弹幕数最多的时间点,如果为空返回 undefined
125
+ */
126
+ declare function findHeatmapPeak(heatmap: HeatmapPoint[]): HeatmapPoint | undefined;
127
+ declare const HeatmapUtils: {
128
+ findPeak: typeof findHeatmapPeak;
129
+ };
130
+ //#endregion
68
131
  //#region src/plugins/merge.d.ts
69
132
  /**
70
133
  * 合并一定时间段内的重复弹幕,防止同屏出现过多
@@ -72,8 +135,8 @@ declare function GetStatsUtil4getMost<T extends unknown>(statMap: Map<T, number>
72
135
  */
73
136
  declare const MergePluginConfigurator: (lifetime?: number) => <T extends UniChunk>(uchunk: T) => Promise<T>;
74
137
  declare namespace index_d_exports {
75
- export { CountTransformer, DowngradeAdvancedPluginConfigurator, GetStatsTransformerConfigurator, GetStatsUtil4getMost, MergePluginConfigurator };
138
+ export { CountTransformer, DowngradeAdvancedPluginConfigurator, GetStatsTransformerConfigurator, GetStatsUtil4getMost, HeatmapTransformerConfigurator, HeatmapUtils, MergePluginConfigurator };
76
139
  }
77
140
  //#endregion
78
- export { CountTransformer, DowngradeAdvancedPluginConfigurator, GetStatsTransformerConfigurator, GetStatsUtil4getMost, MergePluginConfigurator, index_d_exports as t };
141
+ export { CountTransformer, DowngradeAdvancedPluginConfigurator, GetStatsTransformerConfigurator, GetStatsUtil4getMost, HeatmapTransformerConfigurator, HeatmapUtils, MergePluginConfigurator, index_d_exports as t };
79
142
  //# sourceMappingURL=plugins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","names":[],"sources":["../src/plugins/count.ts","../src/plugins/downgradeAdvcanced.ts","../src/plugins/getStats.ts","../src/plugins/merge.ts","../src/plugins/index.ts"],"mappings":";;;;;;;;;cAMa,gBAAA,GAAgB,SAAA,EAAqD,QAArD;;;;;;;cCEhB,mCAAA;EAAmC,OAAA;EAAA;AAAA;EAI9C,OAAA,UAAiB,KAAA;EACjB,OAAA,UAAiB,KAAA;AAAA,iBAEa,QAAA,EAAQ,MAAA,EAAU,CAAA,KAAI,OAAA,CAAQ,CAAA;;;cCXxD,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAWb,SAAA,GAAY,CAAA,CAAE,KAAK,QAAQ,YAAA;AAAA,cAEnB,+BAAA,mCAAmE,SAAA,KAAY,KAAA,EACnF,CAAA,MAAC,SAAA,EAAA,QAAA,OAAA,OAAA,SAGc,CAAA,WAAA,GAAA;;;;;;;;;;;iBAgBR,oBAAA,oBAAwC,OAAA,EAAS,GAAA,CAAI,CAAA;;;;;;;;;;cC3BxD,uBAAA,GAAuB,QAAA,yBACJ,QAAA,EAAQ,MAAA,EAAU,CAAA,KAAI,OAAA,CAAQ,CAAA;AAAA"}
1
+ {"version":3,"file":"plugins.d.ts","names":[],"sources":["../src/plugins/count.ts","../src/plugins/downgradeAdvcanced.ts","../src/plugins/getStats.ts","../src/plugins/heatmap.ts","../src/plugins/merge.ts","../src/plugins/index.ts"],"mappings":";;;;;;;;;cAMa,gBAAA,GAAgB,SAAA,EAAqD,QAArD;;;;;;;cCEhB,mCAAA;EAAmC,OAAA;EAAA;AAAA;EAI9C,OAAA,UAAiB,KAAA;EACjB,OAAA,UAAiB,KAAA;AAAA,iBAEa,QAAA,EAAQ,MAAA,EAAU,CAAA,KAAI,OAAA,CAAQ,CAAA;;;cCXxD,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAWb,SAAA,GAAY,CAAA,CAAE,KAAK,QAAQ,YAAA;AAAA,cAEnB,+BAAA,mCAAmE,SAAA,KAAY,KAAA,EACnF,CAAA,MAAC,SAAA,EAAA,QAAA,OAAA,OAAA,SAGc,CAAA,WAAA,GAAA;;;;;;;;;;;iBAgBR,oBAAA,oBAAwC,OAAA,EAAS,GAAA,CAAI,CAAA;;;;;;;;;UC/B3D,cAAA;;AHAV;;;;EGME,aAAA;;;;AFJF;;;EEYE,WAAW;AAAA;;;;UAMH,YAAA;EFXoD;;;;EEgB5D,IAAA;EFvB8C;;;EE4B9C,KAAK;AAAA;;;;;;;;;;AFrBwD;;;;ACblC;;;;;cC8FhB,8BAAA,GAA8B,OAAA,GAAa,cAAA,MAAc,SAAA,EACtC,QAAA,OAAa,YAAA;;;;;;;iBAyDpC,eAAA,CAAgB,OAAA,EAAS,YAAA,KAAiB,YAAY;AAAA,cAalD,YAAA;EACX,QAAA,SAAQ,eAAA;AAAA;;;;;;;cC9JG,uBAAA,GAAuB,QAAA,yBACJ,QAAA,EAAQ,MAAA,EAAU,CAAA,KAAI,OAAA,CAAQ,CAAA;AAAA"}
package/dist/plugins.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.js";import{n as t}from"./core-D1XUOSXa.js";import{danmakusSelectZod as n}from"./core/db/schema.js";import{a as r,i}from"./adapters-n4ZeTSYX.js";import{t as a}from"./isSame-MiM4wHvK.js";const o=r(e=>e.length),s=({include:e,exclude:n}={})=>i(async r=>{e||=[],n||=[];let i=t=>e?.includes(t)||!n?.includes(t),a=await t.makeChunk(r,{tmp:!0});return await a.upsertDanmakus((await r.$danmakus).map(e=>{if(!e.extra)return e;let t={...e,mode:`Top`,senderID:`compat[bot]@dan-any`};if(i(`danuni`)&&e.extra?.danuni){let n=e.extra.danuni;n.merge&&(t.content=`${t.content} x${n.merge.count}`)}else if(i(`bili`)&&e.extra?.bili){let n=e.extra.bili;n.mode===7&&n.adv?t.content=`[B站高级弹幕]${JSON.parse(n.adv)[4]||``}`:n.command&&(t.content=`[B站指令弹幕]${n.command.content}`,t.fontsize=36)}return t.attr.push(`Compatible`),{...t,DMID:a.$UniDB.DMIDGenerator(t)}})),a});n.pick({content:!0,SOID:!0,mode:!0,fontsize:!0,color:!0,senderID:!0,weight:!0,pool:!0,platform:!0});const c=e=>r(async function(t){let n={},r=e=>{let r=new Map;for(let n of t){let t=n[e];r.set(t,(r.get(t)??0)+1)}n[e]=r};for(let t of e)r(t);return n});function l(e){if(e.size===0)return{val:void 0,count:0};let t,n=0;for(let[r,i]of e.entries())i>n&&(n=i,t=r);return{val:t,count:n}}const u=(e=0)=>i(async n=>{let r=await t.makeChunk(n,{tmp:!0}),i=[...await n.$danmakus].sort((e,t)=>e.progress-t.progress||e.ctime.getTime()-t.ctime.getTime());if(e<=0)return await r.upsertDanmakus(i,!1),r;let o=e*1e3,s=e=>[e.SOID,e.content,e.mode,e.pool,e.platform??``].join(`|`),c=new Map,l=[];for(let e of i){let t=s(e),n=c.get(t)??[],r;for(let t=n.length-1;t>=0;t--){let i=n[t];if(e.progress-i.lastProgress>o)break;if(a(i.base,e)){r=i;break}}if(r){r.members.push(e),r.lastProgress=e.progress,r.senderSet.has(e.senderID)||(r.senderSet.add(e.senderID),r.senders.push(e.senderID));continue}let i={base:e,lastProgress:e.progress,senders:[e.senderID],senderSet:new Set([e.senderID]),members:[e]};n.push(i),c.set(t,n),l.push(i)}return await r.upsertDanmakus(l.map(e=>{if(e.members.length===1)return e.base;let t={duration:e.lastProgress-e.base.progress,count:e.members.length,senders:e.senders,taolu_count:e.members.length,taolu_senders:e.senders},n=e.base.extra?{...e.base.extra,danuni:{...e.base.extra.danuni?e.base.extra.danuni:{},merge:t}}:{danuni:{merge:t}};if(e.senders.length===1){let e=n.danuni;if(e?.merge){let{merge:t,...r}=e;if(Object.keys(r).length>0)n={...n,danuni:r};else{let{danuni:e,...t}=n;n=Object.keys(t).length>0?t:null}}}let i=e.base.attr.includes(`Protect`)?e.base.attr:[...e.base.attr,`Protect`],a=`merge[bot]@dan-any`;return{...e.base,senderID:a,attr:i,extra:n,DMID:r.$UniDB.DMIDGenerator({...e.base,extra:n&&Object.keys(n).length>0?n:null,senderID:a})}})),r});var d=e({CountTransformer:()=>o,DowngradeAdvancedPluginConfigurator:()=>s,GetStatsTransformerConfigurator:()=>c,GetStatsUtil4getMost:()=>l,MergePluginConfigurator:()=>u});export{o as CountTransformer,s as DowngradeAdvancedPluginConfigurator,c as GetStatsTransformerConfigurator,l as GetStatsUtil4getMost,u as MergePluginConfigurator,d as t};
1
+ import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{n as t}from"./core-Czw41GuZ.js";import{danmakusSelectZod as n}from"./core/db/schema.js";import{a as r,i}from"./adapters-BVxXwTH3.js";import{t as a}from"./isSame-qVNOZKCK.js";const o=r(e=>e.length),s=({include:e,exclude:n}={})=>i(async r=>{e||=[],n||=[];let i=t=>e?.includes(t)||!n?.includes(t),a=await t.makeChunk(r,{tmp:!0});return await a.upsertDanmakus((await r.$danmakus).map(e=>{if(!e.extra)return e;let t={...e,mode:`Top`,senderID:`compat[bot]@dan-any`};if(i(`danuni`)&&e.extra?.danuni){let n=e.extra.danuni;n.merge&&(t.content=`${t.content} x${n.merge.count}`)}else if(i(`bili`)&&e.extra?.bili){let n=e.extra.bili;n.mode===7&&n.adv?t.content=`[B站高级弹幕]${JSON.parse(n.adv)[4]||``}`:n.command&&(t.content=`[B站指令弹幕]${n.command.content}`,t.fontsize=36)}return t.attr.push(`Compatible`),{...t,DMID:a.$UniDB.DMIDGenerator(t)}})),a});n.pick({content:!0,SOID:!0,mode:!0,fontsize:!0,color:!0,senderID:!0,weight:!0,pool:!0,platform:!0});const c=e=>r(async function(t){let n={},r=e=>{let r=new Map;for(let n of t){let t=n[e];r.set(t,(r.get(t)??0)+1)}n[e]=r};for(let t of e)r(t);return n});function l(e){if(e.size===0)return{val:void 0,count:0};let t,n=0;for(let[r,i]of e.entries())i>n&&(n=i,t=r);return{val:t,count:n}}function u(e){if(!Number.isFinite(e)||e<=0)throw Error(`Invalid granularity: ${e}. Must be a positive number.`);return e}function d(e){if(e!==void 0&&(!Number.isFinite(e)||e<=0))throw Error(`Invalid videoDuration: ${e}. Must be a positive number.`);return e}function f(e){let t=0;for(let n of e)typeof n.progress==`number`&&!Number.isNaN(n.progress)&&n.progress>t&&(t=n.progress);return t}const p=(e={})=>r(t=>{let n=u(e.granularity??1e3),r=d(e.videoDuration);if(t.length===0)return[];let i=r??f(t);if(i<=0)return[];let a=Math.floor(i/n)+1,o=Array.from({length:a},()=>0);for(let e of t){if(typeof e.progress!=`number`||Number.isNaN(e.progress)||e.progress<0||e.progress>i)continue;let t=Math.floor(e.progress/n);t>=0&&t<a&&o[t]++}return o.map((e,t)=>({time:t*n,count:e}))});function m(e){if(e.length===0)return;let t=e[0];for(let n=1;n<e.length;n++)e[n].count>t.count&&(t=e[n]);return t}const h={findPeak:m},g=(e=0)=>i(async n=>{let r=await t.makeChunk(n,{tmp:!0}),i=[...await n.$danmakus].sort((e,t)=>e.progress-t.progress||e.ctime.getTime()-t.ctime.getTime());if(e<=0)return await r.upsertDanmakus(i,!1),r;let o=e*1e3,s=e=>[e.SOID,e.content,e.mode,e.pool,e.platform??``].join(`|`),c=new Map,l=[];for(let e of i){let t=s(e),n=c.get(t)??[],r;for(let t=n.length-1;t>=0;t--){let i=n[t];if(e.progress-i.lastProgress>o)break;if(a(i.base,e)){r=i;break}}if(r){r.members.push(e),r.lastProgress=e.progress,r.senderSet.has(e.senderID)||(r.senderSet.add(e.senderID),r.senders.push(e.senderID));continue}let i={base:e,lastProgress:e.progress,senders:[e.senderID],senderSet:new Set([e.senderID]),members:[e]};n.push(i),c.set(t,n),l.push(i)}return await r.upsertDanmakus(l.map(e=>{if(e.members.length===1)return e.base;let t={duration:e.lastProgress-e.base.progress,count:e.members.length,senders:e.senders,taolu_count:e.members.length,taolu_senders:e.senders},n=e.base.extra?{...e.base.extra,danuni:{...e.base.extra.danuni?e.base.extra.danuni:{},merge:t}}:{danuni:{merge:t}};if(e.senders.length===1){let e=n.danuni;if(e?.merge){let{merge:t,...r}=e;if(Object.keys(r).length>0)n={...n,danuni:r};else{let{danuni:e,...t}=n;n=Object.keys(t).length>0?t:null}}}let i=e.base.attr.includes(`Protect`)?e.base.attr:[...e.base.attr,`Protect`],a=`merge[bot]@dan-any`;return{...e.base,senderID:a,attr:i,extra:n,DMID:r.$UniDB.DMIDGenerator({...e.base,extra:n&&Object.keys(n).length>0?n:null,senderID:a})}})),r});var _=e({CountTransformer:()=>o,DowngradeAdvancedPluginConfigurator:()=>s,GetStatsTransformerConfigurator:()=>c,GetStatsUtil4getMost:()=>l,HeatmapTransformerConfigurator:()=>p,HeatmapUtils:()=>h,MergePluginConfigurator:()=>g});export{o as CountTransformer,s as DowngradeAdvancedPluginConfigurator,c as GetStatsTransformerConfigurator,l as GetStatsUtil4getMost,p as HeatmapTransformerConfigurator,h as HeatmapUtils,g as MergePluginConfigurator,_ as t};
2
2
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","names":[],"sources":["../src/plugins/count.ts","../src/plugins/downgradeAdvcanced.ts","../src/plugins/getStats.ts","../src/plugins/merge.ts","../src/plugins/index.ts"],"sourcesContent":["import { defineTransformer } from \"@/adapters/index.ts\";\n\n/**\n * 计数转换器:统计弹幕数量,适用于需要获取弹幕总数的场景\n * @deprecated 建议直接使用UniChunk的$count属性获取弹幕数量\n */\nexport const CountTransformer = defineTransformer((udanmakus) => udanmakus.length);\n","import { definePlugin } from \"@/adapters/index.ts\";\nimport type { Extra } from \"@/core/dm-extra.ts\";\nimport { UniChunk } from \"@/core/index.ts\";\n\n/**\n * 降级转换插件:将高级弹幕转换为普通弹幕,适用于无法正确显示高级弹幕的播放器\n * @returns 转换后的弹幕Chunk,临时,导出后可自行调用delete方法删除\n */\nexport const DowngradeAdvancedPluginConfigurator = ({\n include,\n exclude,\n}: {\n include?: (keyof Extra)[];\n exclude?: (keyof Extra)[];\n} = {}) =>\n definePlugin(async <T extends UniChunk>(uchunk: T): Promise<T> => {\n if (!include) include = [];\n if (!exclude) exclude = [];\n const check = (k: keyof Extra) => include?.includes(k) || !exclude?.includes(k);\n const chunk = <T>await UniChunk.makeChunk(uchunk, { tmp: true });\n await chunk.upsertDanmakus(\n (await uchunk.$danmakus).map((d) => {\n if (!d.extra) return d;\n let newDan = {\n ...d,\n mode: \"Top\" as const,\n\n senderID: \"compat[bot]@dan-any\",\n };\n // TODO 分别对 mode7/8/9 command artplayer等正常播放器无法绘制的弹幕做降级处理\n if (check(\"danuni\") && d.extra?.danuni) {\n const danuni = d.extra.danuni;\n if (danuni.merge) {\n newDan.content = `${newDan.content} x${danuni.merge.count}`;\n }\n } else if (check(\"bili\") && d.extra?.bili) {\n const bili = d.extra.bili;\n if (bili.mode === 7 && bili.adv) {\n newDan.content = `[B站高级弹幕]${JSON.parse(bili.adv)[4] || \"\"}`;\n } else if (bili.command) {\n const command = bili.command;\n newDan.content = `[B站指令弹幕]${command.content}`;\n newDan.fontsize = 36;\n }\n }\n newDan.attr.push(\"Compatible\");\n return { ...newDan, DMID: chunk.$UniDB.DMIDGenerator(newDan) };\n }),\n );\n return chunk;\n });\n","import { defineTransformer } from \"@/adapters/index.ts\";\nimport { danmakusSelectZod } from \"@/core/db/schema.ts\";\nimport type { z } from \"zod\";\n\nconst statsItemZod = danmakusSelectZod.pick({\n content: true,\n SOID: true,\n mode: true,\n fontsize: true,\n color: true,\n senderID: true,\n weight: true,\n pool: true,\n platform: true,\n});\ntype StatsItem = z.infer<typeof statsItemZod>;\n\nexport const GetStatsTransformerConfigurator = <const T extends readonly (keyof StatsItem)[]>(\n items: T,\n) =>\n defineTransformer(async function (udanmakus) {\n type StatsMap = { [K in T[number]]: Map<StatsItem[K], number> };\n const statsMap = {} as StatsMap;\n const buildStatMap = <K extends T[number]>(key: K) => {\n const statMap = new Map<StatsItem[K], number>();\n for (const dan of udanmakus) {\n const val = dan[key];\n statMap.set(val, (statMap.get(val) ?? 0) + 1);\n }\n statsMap[key] = statMap;\n };\n for (const key of items) {\n buildStatMap(key);\n }\n return statsMap;\n });\n\nexport function GetStatsUtil4getMost<T extends unknown>(statMap: Map<T, number>) {\n if (statMap.size === 0) return { val: undefined, count: 0 };\n let mostVal: T | undefined = undefined;\n let maxCount = 0;\n for (const [val, count] of statMap.entries()) {\n if (count > maxCount) {\n maxCount = count;\n mostVal = val;\n }\n }\n return { val: mostVal, count: maxCount };\n}\n","import { definePlugin } from \"@/adapters/index.ts\";\nimport type { Extra } from \"@/core/dm-extra.ts\";\nimport { DMAttr } from \"@/core/dm.ts\";\nimport { UniChunk } from \"@/core/index.ts\";\nimport { isSame } from \"@/utils/isSame.ts\";\n\n/**\n * 合并一定时间段内的重复弹幕,防止同屏出现过多\n * @param lifetime 查重时间区段,单位秒 (默认为 0,表示不查重)\n */\nexport const MergePluginConfigurator = (lifetime = 0) =>\n definePlugin(async <T extends UniChunk>(uchunk: T): Promise<T> => {\n const chunk = <T>await UniChunk.makeChunk(uchunk, { tmp: true });\n const sourceDanmakus = [...(await uchunk.$danmakus)].sort(\n (a, b) => a.progress - b.progress || a.ctime.getTime() - b.ctime.getTime(),\n );\n\n if (lifetime <= 0) {\n await chunk.upsertDanmakus(sourceDanmakus, false);\n return chunk;\n }\n\n const lifetimeMs = lifetime * 1000;\n const makeKey = (d: (typeof sourceDanmakus)[number]) =>\n [d.SOID, d.content, d.mode, d.pool, d.platform ?? \"\"].join(\"|\");\n\n type MergeGroup = {\n base: (typeof sourceDanmakus)[number];\n lastProgress: number;\n senders: string[];\n senderSet: Set<string>;\n members: (typeof sourceDanmakus)[number][];\n };\n\n const groups = new Map<string, MergeGroup[]>();\n const orderedGroups: MergeGroup[] = [];\n\n for (const dan of sourceDanmakus) {\n const key = makeKey(dan);\n const bucket = groups.get(key) ?? [];\n let current: MergeGroup | undefined;\n\n for (let index = bucket.length - 1; index >= 0; index--) {\n const candidate = bucket[index];\n if (dan.progress - candidate.lastProgress > lifetimeMs) break;\n if (isSame(candidate.base, dan)) {\n current = candidate;\n break;\n }\n }\n\n if (current) {\n current.members.push(dan);\n current.lastProgress = dan.progress;\n if (!current.senderSet.has(dan.senderID)) {\n current.senderSet.add(dan.senderID);\n current.senders.push(dan.senderID);\n }\n continue;\n }\n\n const nextGroup: MergeGroup = {\n base: dan,\n lastProgress: dan.progress,\n senders: [dan.senderID],\n senderSet: new Set([dan.senderID]),\n members: [dan],\n };\n bucket.push(nextGroup);\n groups.set(key, bucket);\n orderedGroups.push(nextGroup);\n }\n\n await chunk.upsertDanmakus(\n orderedGroups.map((group) => {\n if (group.members.length === 1) {\n return group.base;\n }\n\n const merge = {\n duration: group.lastProgress - group.base.progress,\n count: group.members.length,\n senders: group.senders,\n taolu_count: group.members.length,\n taolu_senders: group.senders,\n };\n let extra: Extra | null = group.base.extra\n ? {\n ...group.base.extra,\n danuni: {\n ...(group.base.extra.danuni ? group.base.extra.danuni : {}),\n merge,\n },\n }\n : {\n danuni: {\n merge,\n },\n };\n if (group.senders.length === 1) {\n const danuni = extra.danuni;\n if (danuni?.merge) {\n const { merge: _merge, ...danuniRest } = danuni;\n if (Object.keys(danuniRest).length > 0) {\n extra = {\n ...extra,\n danuni: danuniRest,\n };\n } else {\n const { danuni: _danuni, ...extraRest } = extra;\n extra = Object.keys(extraRest).length > 0 ? extraRest : null;\n }\n }\n }\n const attr = group.base.attr.includes(DMAttr.Protect)\n ? group.base.attr\n : [...group.base.attr, DMAttr.Protect];\n const senderID = \"merge[bot]@dan-any\";\n\n return {\n ...group.base,\n senderID,\n attr,\n extra,\n DMID: chunk.$UniDB.DMIDGenerator({\n ...group.base,\n extra: extra && Object.keys(extra).length > 0 ? extra : null,\n senderID,\n }),\n };\n }),\n );\n return chunk;\n });\n","export * from \"./count.ts\";\nexport * from \"./downgradeAdvcanced.ts\";\nexport * from \"./getStats.ts\";\nexport * from \"./merge.ts\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","names":[],"sources":["../src/plugins/count.ts","../src/plugins/downgradeAdvcanced.ts","../src/plugins/getStats.ts","../src/plugins/heatmap.ts","../src/plugins/merge.ts","../src/plugins/index.ts"],"sourcesContent":["import { defineTransformer } from \"@/adapters/index.ts\";\n\n/**\n * 计数转换器:统计弹幕数量,适用于需要获取弹幕总数的场景\n * @deprecated 建议直接使用UniChunk的$count属性获取弹幕数量\n */\nexport const CountTransformer = defineTransformer((udanmakus) => udanmakus.length);\n","import { definePlugin } from \"@/adapters/index.ts\";\nimport type { Extra } from \"@/core/dm-extra.ts\";\nimport { UniChunk } from \"@/core/index.ts\";\n\n/**\n * 降级转换插件:将高级弹幕转换为普通弹幕,适用于无法正确显示高级弹幕的播放器\n * @returns 转换后的弹幕Chunk,临时,导出后可自行调用delete方法删除\n */\nexport const DowngradeAdvancedPluginConfigurator = ({\n include,\n exclude,\n}: {\n include?: (keyof Extra)[];\n exclude?: (keyof Extra)[];\n} = {}) =>\n definePlugin(async <T extends UniChunk>(uchunk: T): Promise<T> => {\n if (!include) include = [];\n if (!exclude) exclude = [];\n const check = (k: keyof Extra) => include?.includes(k) || !exclude?.includes(k);\n const chunk = <T>await UniChunk.makeChunk(uchunk, { tmp: true });\n await chunk.upsertDanmakus(\n (await uchunk.$danmakus).map((d) => {\n if (!d.extra) return d;\n let newDan = {\n ...d,\n mode: \"Top\" as const,\n\n senderID: \"compat[bot]@dan-any\",\n };\n // TODO 分别对 mode7/8/9 command artplayer等正常播放器无法绘制的弹幕做降级处理\n if (check(\"danuni\") && d.extra?.danuni) {\n const danuni = d.extra.danuni;\n if (danuni.merge) {\n newDan.content = `${newDan.content} x${danuni.merge.count}`;\n }\n } else if (check(\"bili\") && d.extra?.bili) {\n const bili = d.extra.bili;\n if (bili.mode === 7 && bili.adv) {\n newDan.content = `[B站高级弹幕]${JSON.parse(bili.adv)[4] || \"\"}`;\n } else if (bili.command) {\n const command = bili.command;\n newDan.content = `[B站指令弹幕]${command.content}`;\n newDan.fontsize = 36;\n }\n }\n newDan.attr.push(\"Compatible\");\n return { ...newDan, DMID: chunk.$UniDB.DMIDGenerator(newDan) };\n }),\n );\n return chunk;\n });\n","import { defineTransformer } from \"@/adapters/index.ts\";\nimport { danmakusSelectZod } from \"@/core/db/schema.ts\";\nimport type { z } from \"zod\";\n\nconst statsItemZod = danmakusSelectZod.pick({\n content: true,\n SOID: true,\n mode: true,\n fontsize: true,\n color: true,\n senderID: true,\n weight: true,\n pool: true,\n platform: true,\n});\ntype StatsItem = z.infer<typeof statsItemZod>;\n\nexport const GetStatsTransformerConfigurator = <const T extends readonly (keyof StatsItem)[]>(\n items: T,\n) =>\n defineTransformer(async function (udanmakus) {\n type StatsMap = { [K in T[number]]: Map<StatsItem[K], number> };\n const statsMap = {} as StatsMap;\n const buildStatMap = <K extends T[number]>(key: K) => {\n const statMap = new Map<StatsItem[K], number>();\n for (const dan of udanmakus) {\n const val = dan[key];\n statMap.set(val, (statMap.get(val) ?? 0) + 1);\n }\n statsMap[key] = statMap;\n };\n for (const key of items) {\n buildStatMap(key);\n }\n return statsMap;\n });\n\nexport function GetStatsUtil4getMost<T extends unknown>(statMap: Map<T, number>) {\n if (statMap.size === 0) return { val: undefined, count: 0 };\n let mostVal: T | undefined = undefined;\n let maxCount = 0;\n for (const [val, count] of statMap.entries()) {\n if (count > maxCount) {\n maxCount = count;\n mostVal = val;\n }\n }\n return { val: mostVal, count: maxCount };\n}\n","import { defineTransformer } from \"@/adapters/index.ts\";\nimport type { UDanmaku } from \"@/core/index.ts\";\n\n/**\n * 热力图配置参数\n */\ninterface HeatmapOptions {\n /**\n * 视频总时长(毫秒)\n * - 默认:自动计算为所有弹幕中 progress 的最大值\n * - 用途:确定热力图的时间范围上界\n */\n videoDuration?: number;\n\n /**\n * 时间粒度(毫秒)\n * - 默认:1000(1秒)\n * - 最小值:必须为正数\n * - 用途:将时间轴划分为固定长度的采样点\n */\n granularity?: number;\n}\n\n/**\n * 热力图数据点\n */\ninterface HeatmapPoint {\n /**\n * 时间点(毫秒),表示该采样区间的起始时间\n * @example 0, 1000, 2000, 3000...\n */\n time: number;\n\n /**\n * 该时间段内的弹幕数量\n */\n count: number;\n}\n\n/**\n * 验证并标准化 granularity 参数\n */\nfunction validateGranularity(granularity: number): number {\n if (!Number.isFinite(granularity) || granularity <= 0) {\n throw new Error(`Invalid granularity: ${granularity}. Must be a positive number.`);\n }\n return granularity;\n}\n\n/**\n * 验证并标准化 videoDuration 参数\n */\nfunction validateVideoDuration(videoDuration: number | undefined): number | undefined {\n if (videoDuration !== undefined) {\n if (!Number.isFinite(videoDuration) || videoDuration <= 0) {\n throw new Error(`Invalid videoDuration: ${videoDuration}. Must be a positive number.`);\n }\n }\n return videoDuration;\n}\n\n/**\n * 计算弹幕数组中的最大 progress 值\n */\nfunction calculateMaxProgress(danmakus: UDanmaku[]): number {\n let maxProgress = 0;\n for (const dan of danmakus) {\n if (\n typeof dan.progress === \"number\" &&\n !Number.isNaN(dan.progress) &&\n dan.progress > maxProgress\n ) {\n maxProgress = dan.progress;\n }\n }\n return maxProgress;\n}\n\n/**\n * 热力图转换器配置器\n *\n * @param options - 配置参数\n * @returns Transformer 函数\n *\n * @example\n * ```typescript\n * // 使用默认配置(1秒粒度,自动计算视频长度)\n * const heatmap = await chunk.export(HeatmapTransformerConfigurator());\n *\n * // 自定义配置\n * const heatmap = await chunk.export(HeatmapTransformerConfigurator({\n * videoDuration: 600000, // 10分钟\n * granularity: 500 // 0.5秒\n * }));\n * ```\n */\nexport const HeatmapTransformerConfigurator = (options: HeatmapOptions = {}) =>\n defineTransformer((udanmakus: UDanmaku[]): HeatmapPoint[] => {\n // 1. 参数验证\n const granularity = validateGranularity(options.granularity ?? 1000);\n const specifiedDuration = validateVideoDuration(options.videoDuration);\n\n // 2. 边界情况:空弹幕数组\n if (udanmakus.length === 0) {\n return [];\n }\n\n // 3. 计算视频长度\n const videoDuration = specifiedDuration ?? calculateMaxProgress(udanmakus);\n\n // 4. 边界情况:无有效视频长度\n if (videoDuration <= 0) {\n return [];\n }\n\n // 5. 初始化时间桶\n // 使用 +1 确保能容纳 progress 等于 videoDuration 的弹幕\n const bucketCount = Math.floor(videoDuration / granularity) + 1;\n const buckets = Array.from({ length: bucketCount }, () => 0);\n\n // 6. 分配弹幕到时间桶\n for (const dan of udanmakus) {\n // 数据清洗:跳过无效的 progress\n if (\n typeof dan.progress !== \"number\" ||\n Number.isNaN(dan.progress) ||\n dan.progress < 0 ||\n dan.progress > videoDuration\n ) {\n continue;\n }\n\n // 计算桶索引\n const bucketIndex = Math.floor(dan.progress / granularity);\n\n // 安全性检查(理论上不会越界,但保持防御性编程)\n if (bucketIndex >= 0 && bucketIndex < bucketCount) {\n buckets[bucketIndex]++;\n }\n }\n\n // 7. 生成输出数组\n return buckets.map((count, index) => ({\n time: index * granularity,\n count,\n }));\n });\n\n/**\n * 工具函数:查找热力图中的峰值\n *\n * @param heatmap - 热力图数据\n * @returns 弹幕数最多的时间点,如果为空返回 undefined\n */\nfunction findHeatmapPeak(heatmap: HeatmapPoint[]): HeatmapPoint | undefined {\n if (heatmap.length === 0) return undefined;\n\n let peak = heatmap[0];\n for (let i = 1; i < heatmap.length; i++) {\n if (heatmap[i].count > peak.count) {\n peak = heatmap[i];\n }\n }\n\n return peak;\n}\n\nexport const HeatmapUtils = {\n findPeak: findHeatmapPeak,\n};\n","import { definePlugin } from \"@/adapters/index.ts\";\nimport type { Extra } from \"@/core/dm-extra.ts\";\nimport { DMAttr } from \"@/core/dm.ts\";\nimport { UniChunk } from \"@/core/index.ts\";\nimport { isSame } from \"@/utils/isSame.ts\";\n\n/**\n * 合并一定时间段内的重复弹幕,防止同屏出现过多\n * @param lifetime 查重时间区段,单位秒 (默认为 0,表示不查重)\n */\nexport const MergePluginConfigurator = (lifetime = 0) =>\n definePlugin(async <T extends UniChunk>(uchunk: T): Promise<T> => {\n const chunk = <T>await UniChunk.makeChunk(uchunk, { tmp: true });\n const sourceDanmakus = [...(await uchunk.$danmakus)].sort(\n (a, b) => a.progress - b.progress || a.ctime.getTime() - b.ctime.getTime(),\n );\n\n if (lifetime <= 0) {\n await chunk.upsertDanmakus(sourceDanmakus, false);\n return chunk;\n }\n\n const lifetimeMs = lifetime * 1000;\n const makeKey = (d: (typeof sourceDanmakus)[number]) =>\n [d.SOID, d.content, d.mode, d.pool, d.platform ?? \"\"].join(\"|\");\n\n type MergeGroup = {\n base: (typeof sourceDanmakus)[number];\n lastProgress: number;\n senders: string[];\n senderSet: Set<string>;\n members: (typeof sourceDanmakus)[number][];\n };\n\n const groups = new Map<string, MergeGroup[]>();\n const orderedGroups: MergeGroup[] = [];\n\n for (const dan of sourceDanmakus) {\n const key = makeKey(dan);\n const bucket = groups.get(key) ?? [];\n let current: MergeGroup | undefined;\n\n for (let index = bucket.length - 1; index >= 0; index--) {\n const candidate = bucket[index];\n if (dan.progress - candidate.lastProgress > lifetimeMs) break;\n if (isSame(candidate.base, dan)) {\n current = candidate;\n break;\n }\n }\n\n if (current) {\n current.members.push(dan);\n current.lastProgress = dan.progress;\n if (!current.senderSet.has(dan.senderID)) {\n current.senderSet.add(dan.senderID);\n current.senders.push(dan.senderID);\n }\n continue;\n }\n\n const nextGroup: MergeGroup = {\n base: dan,\n lastProgress: dan.progress,\n senders: [dan.senderID],\n senderSet: new Set([dan.senderID]),\n members: [dan],\n };\n bucket.push(nextGroup);\n groups.set(key, bucket);\n orderedGroups.push(nextGroup);\n }\n\n await chunk.upsertDanmakus(\n orderedGroups.map((group) => {\n if (group.members.length === 1) {\n return group.base;\n }\n\n const merge = {\n duration: group.lastProgress - group.base.progress,\n count: group.members.length,\n senders: group.senders,\n taolu_count: group.members.length,\n taolu_senders: group.senders,\n };\n let extra: Extra | null = group.base.extra\n ? {\n ...group.base.extra,\n danuni: {\n ...(group.base.extra.danuni ? group.base.extra.danuni : {}),\n merge,\n },\n }\n : {\n danuni: {\n merge,\n },\n };\n if (group.senders.length === 1) {\n const danuni = extra.danuni;\n if (danuni?.merge) {\n const { merge: _merge, ...danuniRest } = danuni;\n if (Object.keys(danuniRest).length > 0) {\n extra = {\n ...extra,\n danuni: danuniRest,\n };\n } else {\n const { danuni: _danuni, ...extraRest } = extra;\n extra = Object.keys(extraRest).length > 0 ? extraRest : null;\n }\n }\n }\n const attr = group.base.attr.includes(DMAttr.Protect)\n ? group.base.attr\n : [...group.base.attr, DMAttr.Protect];\n const senderID = \"merge[bot]@dan-any\";\n\n return {\n ...group.base,\n senderID,\n attr,\n extra,\n DMID: chunk.$UniDB.DMIDGenerator({\n ...group.base,\n extra: extra && Object.keys(extra).length > 0 ? extra : null,\n senderID,\n }),\n };\n }),\n );\n return chunk;\n });\n","export * from \"./count.ts\";\nexport * from \"./downgradeAdvcanced.ts\";\nexport * from \"./getStats.ts\";\nexport * from \"./heatmap.ts\";\nexport * from \"./merge.ts\";\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as Simplify } from "./simplify-d7VEIjlJ.js";
2
- import { t as Extra } from "./dm-extra--BY805J3.js";
2
+ import { t as Extra } from "./dm-extra-8pmLcNuD.js";
3
3
  import { z } from "zod";
4
4
  import * as t from "drizzle-orm/pg-core";
5
5
 
@@ -1551,4 +1551,4 @@ declare const DMAttrSchema: z.ZodEnum<{
1551
1551
  }>;
1552
1552
  //#endregion
1553
1553
  export { poolEnum as _, baseRelations as a, chunks as c, danmakusInsertZod as d, danmakusSelectZod as f, onConflictDoUpdateSet as g, onConflictDoUpdate as h, PoolSchema as i, chunksZod as l, modeEnum as m, DanmakusInsert as n, chunk2danmakus as o, dmAttrEnum as p, ModeSchema as r, chunk2danmakusZod as s, DMAttrSchema as t, danmakus as u, relations as v };
1554
- //# sourceMappingURL=schema-B08Jk3HR.d.ts.map
1554
+ //# sourceMappingURL=schema-D_OmIr-T.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-B08Jk3HR.d.ts","names":[],"sources":["../src/core/db/schema.ts"],"mappings":"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"}
1
+ {"version":3,"file":"schema-D_OmIr-T.d.ts","names":[],"sources":["../src/core/db/schema.ts"],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Tt as Promisable, X as InitedUniDB, et as UniChunk, n as Metadata, t as Adapter, ut as UniDMObj } from "./index-DPxMOW6E.js";
2
- import { i as PoolSchema, r as ModeSchema, t as DMAttrSchema } from "./schema-B08Jk3HR.js";
1
+ import { Tt as Promisable, X as InitedUniDB, et as UniChunk, n as Metadata, t as Adapter, ut as UniDMObj } from "./index-CyibNSYQ.js";
2
+ import { i as PoolSchema, r as ModeSchema, t as DMAttrSchema } from "./schema-D_OmIr-T.js";
3
3
  import { z } from "zod";
4
4
 
5
5
  //#region src/utils/fileParser.d.ts
package/dist/utils.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.js";import{n as t}from"./core-D1XUOSXa.js";import{H as n}from"./adapters-n4ZeTSYX.js";import{t as r}from"./isSame-MiM4wHvK.js";const i=async(e,n,r)=>{let i=e instanceof t?e:await e.makeChunk({});for(let e of n){if(e.check?.body){let t=await e.check.body(r);if(t!==null)return i.delete(),t}if(e.check?.adapter){let t=await e.check.adapter(i,r);if(t!==null)return t}}return i.delete(),null},a=(e,t)=>{let n=[];for(let[r,i]of e)if(r.check?.fn){if(r.check.fn(t)){n.push([r,i]);continue}}else{if(t.includes(r.type))return[[r,i]];r.ext.some(e=>t.endsWith(e))&&n.push([r,i])}return n};async function o(e,n,r,o){let s=e instanceof t?e:await e.makeChunk({});return r instanceof File?i(s,a(n,r.name).map(([e])=>e),r):i(s,a(n,r).map(([e])=>e),o)}var s=e({WildcardAdapterUtil:()=>o,WildcardBodyAdapterUtil:()=>i,WildcardFnAdapterUtil:()=>a,fileParser:()=>n,isSame:()=>r});export{o as WildcardAdapterUtil,i as WildcardBodyAdapterUtil,a as WildcardFnAdapterUtil,n as fileParser,r as isSame,s as t};
1
+ import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{n as t}from"./core-Czw41GuZ.js";import{H as n}from"./adapters-BVxXwTH3.js";import{t as r}from"./isSame-qVNOZKCK.js";const i=async(e,n,r)=>{let i=e instanceof t?e:await e.makeChunk({});for(let e of n){if(e.check?.body){let t=await e.check.body(r);if(t!==null)return i.delete(),t}if(e.check?.adapter){let t=await e.check.adapter(i,r);if(t!==null)return t}}return i.delete(),null},a=(e,t)=>{let n=[];for(let[r,i]of e)if(r.check?.fn){if(r.check.fn(t)){n.push([r,i]);continue}}else{if(t.includes(r.type))return[[r,i]];r.ext.some(e=>t.endsWith(e))&&n.push([r,i])}return n};async function o(e,n,r,o){let s=e instanceof t?e:await e.makeChunk({});return r instanceof File?i(s,a(n,r.name).map(([e])=>e),r):i(s,a(n,r).map(([e])=>e),o)}var s=e({WildcardAdapterUtil:()=>o,WildcardBodyAdapterUtil:()=>i,WildcardFnAdapterUtil:()=>a,fileParser:()=>n,isSame:()=>r});export{o as WildcardAdapterUtil,i as WildcardBodyAdapterUtil,a as WildcardFnAdapterUtil,n as fileParser,r as isSame,s as t};
2
2
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../src/utils/wildcardAdapter.ts","../src/utils/index.ts"],"sourcesContent":["import { type Adapter, type Metadata } from \"@/adapters/index.ts\";\nimport { UniChunk, type InitedUniDB } from \"@/core/index.ts\";\n\n/**\n * 通配插件: 在给定范围内尝试导入弹幕\n * @description\n * 可能会有3种返回:\n * 1. 导入成功(无额外参数要求): 直接返回UniChunk\n * 2. 导入成功(需要额外参数): 返回匹配到的Adapter\n * 3. 导入失败: 返回null\n */\nexport const WildcardBodyAdapterUtil = async (\n u: InitedUniDB | UniChunk,\n metadataList: Metadata[],\n body: unknown,\n) => {\n const uchunk = u instanceof UniChunk ? u : await u.makeChunk({});\n for (const metadata of metadataList) {\n if (metadata.check?.body) {\n const r = await metadata.check.body(body);\n if (r !== null) {\n uchunk.delete(); // 需额外参数,返回适配器,当前测试用的chunk视为临时chunk\n return r;\n }\n }\n if (metadata.check?.adapter) {\n const r = await metadata.check.adapter(uchunk, body);\n if (r !== null) return r;\n }\n }\n uchunk.delete(); // 若为无额外参数要求的,其已经被返回,不会执行到这里\n return null;\n};\n\nexport const WildcardFnAdapterUtil = (\n handlerList: [Metadata, Adapter][],\n fn: string,\n): [Metadata, Adapter][] => {\n const possibleHandlers: [Metadata, Adapter][] = [];\n for (const [metadata, adapter] of handlerList) {\n if (metadata.check?.fn) {\n const r = metadata.check.fn(fn);\n if (r) {\n possibleHandlers.push([metadata, adapter]);\n continue;\n }\n } else {\n const r1 = fn.includes(metadata.type);\n if (r1) return [[metadata, adapter]];\n const r2 = metadata.ext.some((e) => fn.endsWith(e));\n if (r2) possibleHandlers.push([metadata, adapter]);\n }\n }\n return possibleHandlers;\n};\n\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n fn: string,\n body: unknown,\n): ReturnType<typeof WildcardBodyAdapterUtil>;\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n file: File,\n): ReturnType<typeof WildcardBodyAdapterUtil>;\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n fn: string | File,\n body?: unknown,\n): ReturnType<typeof WildcardBodyAdapterUtil> {\n const uchunk = u instanceof UniChunk ? u : await u.makeChunk({});\n if (fn instanceof File) {\n const possileHandlers = WildcardFnAdapterUtil(handlerList, fn.name);\n return WildcardBodyAdapterUtil(\n uchunk,\n possileHandlers.map(([m]) => m),\n fn,\n );\n }\n const possileHandlers = WildcardFnAdapterUtil(handlerList, fn);\n return WildcardBodyAdapterUtil(\n uchunk,\n possileHandlers.map(([m]) => m),\n body,\n );\n}\n","export * from \"./fileParser.ts\";\nexport * from \"./isSame.ts\";\nexport * from \"./wildcardAdapter.ts\";\n"],"mappings":"mKAWA,MAAa,EAA0B,MACrC,EACA,EACA,IACG,CACH,IAAM,EAAS,aAAa,EAAW,EAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EAC/D,IAAK,IAAM,KAAY,EAAc,CACnC,GAAI,EAAS,OAAO,KAAM,CACxB,IAAM,EAAI,MAAM,EAAS,MAAM,KAAK,CAAI,EACxC,GAAI,IAAM,KAER,OADA,EAAO,OAAO,EACP,CAEX,CACA,GAAI,EAAS,OAAO,QAAS,CAC3B,IAAM,EAAI,MAAM,EAAS,MAAM,QAAQ,EAAQ,CAAI,EACnD,GAAI,IAAM,KAAM,OAAO,CACzB,CACF,CAEA,OADA,EAAO,OAAO,EACP,IACT,EAEa,GACX,EACA,IAC0B,CAC1B,IAAM,EAA0C,CAAC,EACjD,IAAK,GAAM,CAAC,EAAU,KAAY,EAChC,GAAI,EAAS,OAAO,OACR,EAAS,MAAM,GAAG,CACxB,EAAG,CACL,EAAiB,KAAK,CAAC,EAAU,CAAO,CAAC,EACzC,QACF,MACK,CAEL,GADW,EAAG,SAAS,EAAS,IAC3B,EAAG,MAAO,CAAC,CAAC,EAAU,CAAO,CAAC,EACxB,EAAS,IAAI,KAAM,GAAM,EAAG,SAAS,CAAC,CAC5C,GAAG,EAAiB,KAAK,CAAC,EAAU,CAAO,CAAC,CACnD,CAEF,OAAO,CACT,EAaA,eAAsB,EACpB,EACA,EACA,EACA,EAC4C,CAC5C,IAAM,EAAS,aAAa,EAAW,EAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EAU/D,OATI,aAAc,KAET,EACL,EAFsB,EAAsB,EAAa,EAAG,IAG9C,EAAE,KAAK,CAAC,KAAO,CAAC,EAC9B,CACF,EAGK,EACL,EAFsB,EAAsB,EAAa,CAG3C,EAAE,KAAK,CAAC,KAAO,CAAC,EAC9B,CACF,CACF"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils/wildcardAdapter.ts","../src/utils/index.ts"],"sourcesContent":["import { type Adapter, type Metadata } from \"@/adapters/index.ts\";\nimport { UniChunk, type InitedUniDB } from \"@/core/index.ts\";\n\n/**\n * 通配插件: 在给定范围内尝试导入弹幕\n * @description\n * 可能会有3种返回:\n * 1. 导入成功(无额外参数要求): 直接返回UniChunk\n * 2. 导入成功(需要额外参数): 返回匹配到的Adapter\n * 3. 导入失败: 返回null\n */\nexport const WildcardBodyAdapterUtil = async (\n u: InitedUniDB | UniChunk,\n metadataList: Metadata[],\n body: unknown,\n) => {\n const uchunk = u instanceof UniChunk ? u : await u.makeChunk({});\n for (const metadata of metadataList) {\n if (metadata.check?.body) {\n const r = await metadata.check.body(body);\n if (r !== null) {\n uchunk.delete(); // 需额外参数,返回适配器,当前测试用的chunk视为临时chunk\n return r;\n }\n }\n if (metadata.check?.adapter) {\n const r = await metadata.check.adapter(uchunk, body);\n if (r !== null) return r;\n }\n }\n uchunk.delete(); // 若为无额外参数要求的,其已经被返回,不会执行到这里\n return null;\n};\n\nexport const WildcardFnAdapterUtil = (\n handlerList: [Metadata, Adapter][],\n fn: string,\n): [Metadata, Adapter][] => {\n const possibleHandlers: [Metadata, Adapter][] = [];\n for (const [metadata, adapter] of handlerList) {\n if (metadata.check?.fn) {\n const r = metadata.check.fn(fn);\n if (r) {\n possibleHandlers.push([metadata, adapter]);\n continue;\n }\n } else {\n const r1 = fn.includes(metadata.type);\n if (r1) return [[metadata, adapter]];\n const r2 = metadata.ext.some((e) => fn.endsWith(e));\n if (r2) possibleHandlers.push([metadata, adapter]);\n }\n }\n return possibleHandlers;\n};\n\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n fn: string,\n body: unknown,\n): ReturnType<typeof WildcardBodyAdapterUtil>;\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n file: File,\n): ReturnType<typeof WildcardBodyAdapterUtil>;\nexport async function WildcardAdapterUtil(\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n fn: string | File,\n body?: unknown,\n): ReturnType<typeof WildcardBodyAdapterUtil> {\n const uchunk = u instanceof UniChunk ? u : await u.makeChunk({});\n if (fn instanceof File) {\n const possileHandlers = WildcardFnAdapterUtil(handlerList, fn.name);\n return WildcardBodyAdapterUtil(\n uchunk,\n possileHandlers.map(([m]) => m),\n fn,\n );\n }\n const possileHandlers = WildcardFnAdapterUtil(handlerList, fn);\n return WildcardBodyAdapterUtil(\n uchunk,\n possileHandlers.map(([m]) => m),\n body,\n );\n}\n","export * from \"./fileParser.ts\";\nexport * from \"./isSame.ts\";\nexport * from \"./wildcardAdapter.ts\";\n"],"mappings":"8KAWA,MAAa,EAA0B,MACrC,EACA,EACA,IACG,CACH,IAAM,EAAS,aAAa,EAAW,EAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EAC/D,IAAK,IAAM,KAAY,EAAc,CACnC,GAAI,EAAS,OAAO,KAAM,CACxB,IAAM,EAAI,MAAM,EAAS,MAAM,KAAK,CAAI,EACxC,GAAI,IAAM,KAER,OADA,EAAO,OAAO,EACP,CAEX,CACA,GAAI,EAAS,OAAO,QAAS,CAC3B,IAAM,EAAI,MAAM,EAAS,MAAM,QAAQ,EAAQ,CAAI,EACnD,GAAI,IAAM,KAAM,OAAO,CACzB,CACF,CAEA,OADA,EAAO,OAAO,EACP,IACT,EAEa,GACX,EACA,IAC0B,CAC1B,IAAM,EAA0C,CAAC,EACjD,IAAK,GAAM,CAAC,EAAU,KAAY,EAChC,GAAI,EAAS,OAAO,OACR,EAAS,MAAM,GAAG,CACxB,EAAG,CACL,EAAiB,KAAK,CAAC,EAAU,CAAO,CAAC,EACzC,QACF,MACK,CAEL,GADW,EAAG,SAAS,EAAS,IAC3B,EAAG,MAAO,CAAC,CAAC,EAAU,CAAO,CAAC,EACxB,EAAS,IAAI,KAAM,GAAM,EAAG,SAAS,CAAC,CAC5C,GAAG,EAAiB,KAAK,CAAC,EAAU,CAAO,CAAC,CACnD,CAEF,OAAO,CACT,EAaA,eAAsB,EACpB,EACA,EACA,EACA,EAC4C,CAC5C,IAAM,EAAS,aAAa,EAAW,EAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EAU/D,OATI,aAAc,KAET,EACL,EAFsB,EAAsB,EAAa,EAAG,IAG9C,CAAC,CAAC,KAAK,CAAC,KAAO,CAAC,EAC9B,CACF,EAGK,EACL,EAFsB,EAAsB,EAAa,CAG3C,CAAC,CAAC,KAAK,CAAC,KAAO,CAAC,EAC9B,CACF,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dan-uni/dan-any",
3
- "version": "2.2.5",
3
+ "version": "2.2.8",
4
4
  "description": "A danmaku transformer lib, supporting danmaku from different platforms.",
5
5
  "keywords": [
6
6
  "bangumi",
@@ -46,31 +46,31 @@
46
46
  "prepublishOnly": "vp run buf && vp run db:generate && vp run build"
47
47
  },
48
48
  "dependencies": {
49
- "@bufbuild/protobuf": "^2.12.0",
50
- "@electric-sql/pglite": "^0.5.2",
51
- "@electric-sql/pglite-tools": "^0.4.2",
49
+ "@bufbuild/protobuf": "^2.12.1",
50
+ "@electric-sql/pglite": "^0.5.3",
51
+ "@electric-sql/pglite-tools": "^0.4.3",
52
52
  "@noble/hashes": "^2.2.0",
53
53
  "drizzle-orm": "^1.0.0-rc.4-5d5b77c",
54
54
  "fast-xml-builder": "^1.2.0",
55
- "fast-xml-parser": "^5.9.0",
55
+ "fast-xml-parser": "^5.9.3",
56
56
  "json-bigint": "^1.0.0",
57
57
  "zod": "^4.4.3"
58
58
  },
59
59
  "devDependencies": {
60
- "@arethetypeswrong/core": "^0.18.3",
61
- "@bufbuild/buf": "^1.70.0",
62
- "@bufbuild/protoc-gen-es": "^2.12.0",
60
+ "@arethetypeswrong/core": "^0.18.4",
61
+ "@bufbuild/buf": "^1.71.0",
62
+ "@bufbuild/protoc-gen-es": "^2.12.1",
63
63
  "@types/json-bigint": "^1.0.4",
64
- "@types/node": "^25.9.3",
65
- "@typescript/native-preview": "^7.0.0-dev.20260616.1",
64
+ "@types/node": "^26.0.1",
65
+ "@typescript/native-preview": "^7.0.0-dev.20260624.1",
66
66
  "@vitest/ui": "^4.1.9",
67
67
  "bumpp": "^11.1.0",
68
68
  "bun-types": "^1.3.14",
69
69
  "drizzle-kit": "^1.0.0-rc.4-ca0f029",
70
- "protobufjs": "^8.6.3",
70
+ "protobufjs": "^8.6.5",
71
71
  "type-fest": "^5.7.0",
72
72
  "typescript": "^6.0.3",
73
- "vite-plus": "^0.1.24"
73
+ "vite-plus": "^0.2.1"
74
74
  },
75
75
  "overrides": {
76
76
  "vite": "npm:@voidzero-dev/vite-plus-core@latest",
@@ -1,2 +0,0 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.js";import{a as t,b as n,c as r,l as i,o as a,s as o,u as s}from"./core-D1XUOSXa.js";import{danmakus as c}from"./core/db/schema.js";import{z as l}from"zod";import{fileDesc as u,messageDesc as d}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as f,timestampDate as ee,timestampFromDate as te,timestampNow as ne}from"@bufbuild/protobuf/wkt";import{create as re,fromBinary as p,toBinary as ie}from"@bufbuild/protobuf";import{XMLParser as ae}from"fast-xml-parser";import oe from"fast-xml-builder";const se=e=>e?[`adv`,`bas`,`code`,`command`].some(t=>e[t]):!1;function ce(e){return e.mode!==`Ext`&&e.extra&&(e.extra.artplayer||se(e.extra.bili))?(e.mode=`Ext`,!0):!1}function m(e){let t=n.parse(e);return{...t,bili:t.bili?{...t.bili,dmid:t.bili.dmid?.toString(),mid:t.bili.mid?.toString()}:void 0}}const le=l.float32(),ue=l.int();function de(e){return ue.parse(~~(le.parse(e)*1e3))}function h(e,t,n=globalThis.JSON){let r=e instanceof ArrayBuffer||e instanceof Uint8Array;switch(t){case`bin`:if(r)return e;if(e instanceof File)return e.arrayBuffer();if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`Expected binary data for mod "bin"`);case`string`:if(typeof e==`string`)return e;if(e instanceof File)return e.text();if(r)return new TextDecoder().decode(e);if(ArrayBuffer.isView(e))return new TextDecoder().decode(new Uint8Array(e.buffer,e.byteOffset,e.byteLength));throw TypeError(`Expected binary data or string for mod "string"`);case`json`:{if(typeof e==`object`&&e&&!r)return e;if(e instanceof File)return e.json();if(typeof e!=`string`&&!r&&!ArrayBuffer.isView(e))throw TypeError(`Expected object, JSON string, or binary data for mod "json"`);let t=typeof e==`string`?e:new TextDecoder().decode(r?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength));try{return n.parse(t)}catch{throw Error(`Invalid JSON string`)}}default:throw Error(`Unsupported mod`)}}const g=l.codec(l.enum(o).default(0),l.enum(c.mode.enumValues),{decode:e=>c.mode.enumValues[e]||`Normal`,encode:e=>o[e]||0}),_=l.codec(l.enum(r).default(0),l.enum(c.pool.enumValues),{decode:e=>c.pool.enumValues[e]||`Def`,encode:e=>r[e]||0}),v=l.codec(l.enum(t).array(),l.enum(c.attr.enumValues).array(),{decode:e=>e,encode:e=>e.map(e=>t[e])});function fe(e){let t=!Number.isInteger(e.progress),n=typeof e.extraStr==`string`;return t||n}const y=Z((e,t)=>async(n,r)=>{let a=new Date,o=r??await n.makeChunk({}),s=t?.isV1?!0:e.some(e=>fe(e));return await o.upsertDanmakus(e.map(e=>{let t={SOID:e.SOID||i.SOID,progress:e.progress?s?de(e.progress):e.progress:i.progress,mode:g.decode(e.mode),fontsize:e.fontsize??i.fontsize,color:e.color??i.color,senderID:e.senderID||i.senderID,content:e.content??i.content,ctime:e.ctime?new Date(e.ctime):a,weight:e.weight??i.weight,pool:_.decode(e.pool),attr:e.attr?v.decode(e.attr):i.attr,platform:e.platform??i.platform,extra:e.extra??(e.extraStr?m(e.extraStr):i.extra)};return ce(t),{...t,DMID:!s&&e.DMID?e.DMID:o.$UniDB.DMIDGenerator(t)}})),o});function b(e){return Q(t=>e?.minify?t.map(e=>({SOID:e.SOID===i.SOID?void 0:e.SOID,progress:e.progress===i.progress?void 0:e.progress,mode:e.mode===`Normal`?void 0:g.encode(e.mode),fontsize:e.fontsize===i.fontsize?void 0:e.fontsize,color:e.color===i.color?void 0:e.color,senderID:e.senderID===i.senderID?void 0:e.senderID,content:e.content===i.content?void 0:e.content,ctime:e.ctime,weight:e.weight===i.weight?void 0:e.weight,pool:e.pool===`Def`?void 0:_.encode(e.pool),attr:e.attr&&e.attr.length>0?v.encode(e.attr):void 0,platform:e.platform??void 0,extra:e.extra??void 0,DMID:e.DMID})):t.map(e=>({...e,mode:g.encode(e.mode),pool:_.encode(e.pool),attr:v.encode(e.attr)})))}const x=$({type:`danuni.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return e.import(y(await h(t,`json`)))}catch{return null}}}}),S=d(u(`Ch9kYW51bmkvZGFubWFrdS92MS9kYW5tYWt1LnByb3RvEhFkYW51bmkuZGFubWFrdS52MSI2Cg5MaXN0RGFuUmVxdWVzdBIKCgJpZBgBIAEoCRIQCgNzZWcYAiABKAVIAIgBAUIGCgRfc2VnIpMDCgdEYW5tYWt1EhIKBHNvaWQYASABKAlSBFNPSUQSEgoEZG1pZBgCIAEoCVIERE1JRBIQCghwcm9ncmVzcxgDIAEoBRIlCgRtb2RlGAQgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuTW9kZRIQCghmb250c2l6ZRgFIAEoBRINCgVjb2xvchgGIAEoBRIbCglzZW5kZXJfaWQYByABKAlSCHNlbmRlcklEEg8KB2NvbnRlbnQYCCABKAkSKQoFY3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBndlaWdodBgKIAEoBRIlCgRwb29sGAsgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuUG9vbBIMCgRhdHRyGAwgAygJEhUKCHBsYXRmb3JtGA0gASgJSACIAQESGQoIZXh0cmFfdjEYDiABKAlCAhgBSAGIAQESEgoFZXh0cmEYDyABKAlIAogBAUILCglfcGxhdGZvcm1CCwoJX2V4dHJhX3YxQggKBl9leHRyYSI/Cg9MaXN0RGFuUmVzcG9uc2USLAoIZGFubWFrdXMYASADKAsyGi5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1KmIKBE1vZGUSGwoXTU9ERV9OT1JNQUxfVU5TUEVDSUZJRUQQABIPCgtNT0RFX0JPVFRPTRABEgwKCE1PREVfVE9QEAISEAoMTU9ERV9SRVZFUlNFEAMSDAoITU9ERV9FWFQQBCpJCgRQb29sEhgKFFBPT0xfREVGX1VOU1BFQ0lGSUVEEAASDAoIUE9PTF9TVUIQARIMCghQT09MX0FEVhACEgsKB1BPT0xfSVgQAzJkCg5EYW5tYWt1U2VydmljZRJSCgdMaXN0RGFuEiEuZGFudW5pLmRhbm1ha3UudjEuTGlzdERhblJlcXVlc3QaIi5kYW51bmkuZGFubWFrdS52MS5MaXN0RGFuUmVzcG9uc2UiAEKLAQoVY29tLmRhbnVuaS5kYW5tYWt1LnYxQgxEYW5tYWt1UHJvdG9QAaICA0REWKoCEURhbnVuaS5EYW5tYWt1LlYxygIRRGFudW5pXERhbm1ha3VcVjHiAh1EYW51bmlcRGFubWFrdVxWMVxHUEJNZXRhZGF0YeoCE0RhbnVuaTo6RGFubWFrdTo6VjFiBnByb3RvMw`,[f]),2);let pe=function(e){return e[e.NORMAL_UNSPECIFIED=0]=`NORMAL_UNSPECIFIED`,e[e.BOTTOM=1]=`BOTTOM`,e[e.TOP=2]=`TOP`,e[e.REVERSE=3]=`REVERSE`,e[e.EXT=4]=`EXT`,e}({}),me=function(e){return e[e.DEF_UNSPECIFIED=0]=`DEF_UNSPECIFIED`,e[e.SUB=1]=`SUB`,e[e.ADV=2]=`ADV`,e[e.IX=3]=`IX`,e}({});const C=l.codec(l.enum(pe),l.enum(c.mode.enumValues),{decode:e=>c.mode.enumValues[e]||`Normal`,encode:e=>{let t=c.mode.enumValues.indexOf(e);return t===-1?0:t}}),he=l.codec(l.enum(me),l.enum(c.pool.enumValues),{decode:e=>c.pool.enumValues[e]||`Def`,encode:e=>{let t=c.pool.enumValues.indexOf(e);return t===-1?0:t}}),w=Z(e=>async(t,r)=>{let a=p(S,new Uint8Array(e)),o=r??await t.makeChunk({}),s=a.danmakus.some(e=>e.extraV1);return await o.upsertDanmakus(a.danmakus.map(e=>{let t={...e,SOID:e.soid,DMID:e.dmid,mode:C.decode(e.mode),senderID:e.senderId,ctime:ee(e.ctime||ne()),pool:he.decode(e.pool),attr:l.enum(c.attr.enumValues).array().parse(e.attr),platform:e.platform??i.platform,extra:e.extra?n.parse(e.extra):e.extraV1?m(e.extraV1):void 0};return s?{...t,DMID:o.$UniDB.DMIDGenerator(t)}:t})),o}),ge=Q(e=>ie(S,re(S,{danmakus:e.map(e=>({...e,soid:e.SOID,dmid:e.DMID,mode:C.encode(e.mode),senderId:e.senderID,ctime:te(e.ctime),pool:he.encode(e.pool),platform:e.platform??void 0,extra:n.stringify(e.extra)}))}))),T=$({type:`danuni.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`],check:{adapter:async(e,t)=>{try{return await e.import(w(await h(t,`bin`)))}catch{return null}}}}),E=u(`CiliaWxpYmlsaS9jb21tdW5pdHkvc2VydmljZS9kbS92MS9kbS5wcm90bxIgYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEiZAoGQXZhdGFyEgoKAmlkGAEgASgJEgsKA3VybBgCIAEoCRJBCgthdmF0YXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhclR5cGUiIwoGQnViYmxlEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJIsYBCghCdWJibGVWMhIMCgR0ZXh0GAEgASgJEgsKA3VybBgCIAEoCRJBCgtidWJibGVfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVR5cGUSFQoNZXhwb3N1cmVfb25jZRgEIAEoCBJFCg1leHBvc3VyZV90eXBlGAUgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIlsKBkJ1dHRvbhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlIlgKDkJ1enp3b3JkQ29uZmlnEkYKCGtleXdvcmRzGAEgAygLMjQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnV6endvcmRTaG93Q29uZmlnIngKEkJ1enp3b3JkU2hvd0NvbmZpZxIMCgRuYW1lGAEgASgJEg4KBnNjaGVtYRgCIAEoCRIOCgZzb3VyY2UYAyABKAUSCgoCaWQYBCABKAMSEwoLYnV6endvcmRfaWQYBSABKAMSEwoLc2NoZW1hX3R5cGUYBiABKAUiewoIQ2hlY2tCb3gSDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgSDAoEc2hvdxgEIAEoCCJvCgpDaGVja0JveFYyEgwKBHRleHQYASABKAkSPAoEdHlwZRgCIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrYm94VHlwZRIVCg1kZWZhdWx0X3ZhbHVlGAMgASgIIoICCgtDbGlja0J1dHRvbhIVCg1wb3J0cmFpdF90ZXh0GAEgAygJEhYKDmxhbmRzY2FwZV90ZXh0GAIgAygJEhsKE3BvcnRyYWl0X3RleHRfZm9jdXMYAyADKAkSHAoUbGFuZHNjYXBlX3RleHRfZm9jdXMYBCADKAkSQQoLcmVuZGVyX3R5cGUYBSABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEgwKBHNob3cYBiABKAgSOAoGYnViYmxlGAcgASgLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlIrMCCg1DbGlja0J1dHRvblYyEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSFwoPdGV4dF9pbnB1dF9wb3N0GAYgASgIEhUKDWV4cG9zdXJlX29uY2UYByABKAgSRQoNZXhwb3N1cmVfdHlwZRgIIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cG9zdXJlVHlwZSJLCgdDb21tYW5kEkAKC2NvbW1hbmRfZG1zGAEgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZERtIuYBCglDb21tYW5kRG0SCgoCaWQYASABKAMSCwoDb2lkGAIgASgDEgsKA21pZBgDIAEoAxIPCgdjb21tYW5kGAQgASgJEg8KB2NvbnRlbnQYBSABKAkSEAoIcHJvZ3Jlc3MYBiABKAUSDQoFY3RpbWUYByABKAkSDQoFbXRpbWUYCCABKAkSDQoFZXh0cmEYCSABKAkSDQoFaWRTdHIYCiABKAkSDAoEdHlwZRgLIAEoBRITCgthdXRvX2NyZWF0ZRgMIAEoCBISCgpjb3VudF9kb3duGA0gASgFEgwKBGF0dHIYDiABKAUiUAoNRGFubWFrdUFJRmxhZxI/CghkbV9mbGFncxgBIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnIosDCgtEYW5tYWt1RWxlbRIKCgJpZBgBIAEoAxIQCghwcm9ncmVzcxgCIAEoBRIMCgRtb2RlGAMgASgFEhAKCGZvbnRzaXplGAQgASgFEj8KBWNvbG9yGAUgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSEAoIbWlkX2hhc2gYBiABKAkSDwoHY29udGVudBgHIAEoCRINCgVjdGltZRgIIAEoAxIOCgZ3ZWlnaHQYCSABKAUSDgoGYWN0aW9uGAogASgJEgwKBHBvb2wYCyABKAUSDgoGaWRfc3RyGAwgASgJEgwKBGF0dHIYDSABKAUSEQoJYW5pbWF0aW9uGBYgASgJEg0KBWV4dHJhGBcgASgJEkIKCGNvbG9yZnVsGBggASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSDAoEdHlwZRgZIAEoBRILCgNvaWQYGiABKAMiKQoLRGFubWFrdUZsYWcSDAoEZG1pZBgBIAEoAxIMCgRmbGFnGAIgASgFIksKEURhbm1ha3VGbGFnQ29uZmlnEhAKCHJlY19mbGFnGAEgASgFEhAKCHJlY190ZXh0GAIgASgJEhIKCnJlY19zd2l0Y2gYAyABKAUiiwcKGERhbm11RGVmYXVsdFBsYXllckNvbmZpZxIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYASABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X3N3aXRjaBgQIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV9zZW5pb3JfbW9kZV9zd2l0Y2gYESABKAUSLgomcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjIYEiABKAUSmAEKKnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyX21hcBgTIAMoCzJkLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11RGVmYXVsdFBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgUIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIuwJChFEYW5tdVBsYXllckNvbmZpZxIdChVwbGF5ZXJfZGFubWFrdV9zd2l0Y2gYASABKAgSIgoacGxheWVyX2Rhbm1ha3Vfc3dpdGNoX3NhdmUYAiABKAgSKQohcGxheWVyX2Rhbm1ha3VfdXNlX2RlZmF1bHRfY29uZmlnGAMgASgIEiwKJHBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX3N3aXRjaBgEIAEoCBIrCiNwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbBgFIAEoBRIfChdwbGF5ZXJfZGFubWFrdV9ibG9ja3RvcBgGIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3Njcm9sbBgHIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja2JvdHRvbRgIIAEoCBIkChxwbGF5ZXJfZGFubWFrdV9ibG9ja2NvbG9yZnVsGAkgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrcmVwZWF0GAogASgIEiMKG3BsYXllcl9kYW5tYWt1X2Jsb2Nrc3BlY2lhbBgLIAEoCBIeChZwbGF5ZXJfZGFubWFrdV9vcGFjaXR5GAwgASgCEiQKHHBsYXllcl9kYW5tYWt1X3NjYWxpbmdmYWN0b3IYDSABKAISHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCEhwKFHBsYXllcl9kYW5tYWt1X3NwZWVkGA8gASgFEiYKHnBsYXllcl9kYW5tYWt1X2VuYWJsZWJsb2NrbGlzdBgQIAEoCBIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBEgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9jb25maWcYEiABKAUSJgoecGxheWVyX2Rhbm1ha3VfaW9zX3N3aXRjaF9zYXZlGBMgASgFEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgUIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgVIAEoBRKRAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBYgAygLMl0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyTWFwRW50cnkSJQodcGxheWVyX2Rhbm1ha3VfZW5hYmxlX2hlcmRfZG0YFyABKAgSJgoecGxheWVyX2Rhbm1ha3VfYmxvY2t0b3BfYm90dG9tGBggASgIEiAKGHBsYXllcl9kYW5tYWt1X2RvbWFpbl92MhgZIAEoBRIeChZwbGF5ZXJfZGFubWFrdV9kZW5zaXR5GBogASgFEiUKHXBsYXllcl9kYW5tYWt1X3N1YnRpdGxlX3Byb29mGBsgASgIEiMKG3BsYXllcl9kYW5tYWt1X3Blb3BsZV9wcm9vZhgcIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIjAKFkRhbm11UGxheWVyQ29uZmlnUGFuZWwSFgoOc2VsZWN0aW9uX3RleHQYASABKAkiSwoYRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEhAKCHByb2dyZXNzGAEgASgFEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAiKQAwoVRGFubXVQbGF5ZXJWaWV3Q29uZmlnEmEKHWRhbm11a3VfZGVmYXVsdF9wbGF5ZXJfY29uZmlnGAEgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnElIKFWRhbm11a3VfcGxheWVyX2NvbmZpZxgCIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnEmEKHWRhbm11a3VfcGxheWVyX2R5bmFtaWNfY29uZmlnGAMgAygLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEl0KG2Rhbm11a3VfcGxheWVyX2NvbmZpZ19wYW5lbBgEIAEoCzI4LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnUGFuZWwimQUKFERhbm11V2ViUGxheWVyQ29uZmlnEhEKCWRtX3N3aXRjaBgBIAEoCBIRCglhaV9zd2l0Y2gYAiABKAgSEAoIYWlfbGV2ZWwYAyABKAUSEAoIYmxvY2t0b3AYBCABKAgSEwoLYmxvY2tzY3JvbGwYBSABKAgSEwoLYmxvY2tib3R0b20YBiABKAgSEgoKYmxvY2tjb2xvchgHIAEoCBIUCgxibG9ja3NwZWNpYWwYCCABKAgSFAoMcHJldmVudHNoYWRlGAkgASgIEg0KBWRtYXNrGAogASgIEg8KB29wYWNpdHkYCyABKAISDgoGZG1hcmVhGAwgASgFEhEKCXNwZWVkcGx1cxgNIAEoAhIQCghmb250c2l6ZRgOIAEoAhISCgpzY3JlZW5zeW5jGA8gASgIEhEKCXNwZWVkc3luYxgQIAEoCBISCgpmb250ZmFtaWx5GBEgASgJEgwKBGJvbGQYEiABKAgSEgoKZm9udGJvcmRlchgTIAEoBRIRCglkcmF3X3R5cGUYFCABKAkSGgoSc2VuaW9yX21vZGVfc3dpdGNoGBUgASgFEhMKC2FpX2xldmVsX3YyGBYgASgFEmEKD2FpX2xldmVsX3YyX21hcBgXIAMoCzJILmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnLkFpTGV2ZWxWMk1hcEVudHJ5EhcKD2Jsb2NrdG9wX2JvdHRvbRgYIAEoCBISCgpkbV9hcmVhX3YyGBkgASgFEhIKCmRtX2RlbnNpdHkYGiABKAUaMwoRQWlMZXZlbFYyTWFwRW50cnkSCwoDa2V5GAEgASgFEg0KBXZhbHVlGAIgASgFOgI4ASJZCgpEbUNvbG9yZnVsEj4KBHR5cGUYASABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRILCgNzcmMYAiABKAkiUAoPRG1FeHBvUmVwb3J0UmVxEhIKCnNlc3Npb25faWQYASABKAkSCwoDb2lkGAIgASgDEg0KBWRtaWRzGAMgASgMEg0KBXNwbWlkGAQgASgJIhEKD0RtRXhwb1JlcG9ydFJlcyJtCgpEbUhlcmRWaWV3EhsKE2Rpc3BsYXlfaGVyZF9kbV9udW0YASABKAUSQgoIaGVyZF9kbXMYAiADKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWV3SGVyZERtRWxlbSKWAgoKRG1NYXNrV2FsbBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSDwoHY29udGVudBgDIAEoCRJNCgxjb250ZW50X3R5cGUYBCABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSRQoIYml6X3R5cGUYBSABKA4yMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQml6VHlwZRJFCghjb250ZW50cxgGIAMoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50ImsKEURtTWFza1dhbGxDb250ZW50EkUKBHR5cGUYASABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSDwoHY29udGVudBgCIAEoCSLNEAoRRG1QbGF5ZXJDb25maWdSZXESCgoCdHMYASABKAMSRQoGc3dpdGNoGAIgASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaBJOCgtzd2l0Y2hfc2F2ZRgDIAEoCzI5LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTd2l0Y2hTYXZlElsKEnVzZV9kZWZhdWx0X2NvbmZpZxgEIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEmEKFWFpX3JlY29tbWVuZGVkX3N3aXRjaBgFIAEoCzJCLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkU3dpdGNoEl8KFGFpX3JlY29tbWVuZGVkX2xldmVsGAYgASgLMkEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBJJCghibG9ja3RvcBgHIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3RvcBJPCgtibG9ja3Njcm9sbBgIIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBJPCgtibG9ja2JvdHRvbRgJIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja2JvdHRvbRJTCg1ibG9ja2NvbG9yZnVsGAogASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSTwoLYmxvY2tyZXBlYXQYCyABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tyZXBlYXQSUQoMYmxvY2tzcGVjaWFsGAwgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBJHCgdvcGFjaXR5GA0gASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdU9wYWNpdHkSUwoNc2NhbGluZ2ZhY3RvchgOIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTY2FsaW5nZmFjdG9yEkUKBmRvbWFpbhgPIAEoCzI1LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW4SQwoFc3BlZWQYECABKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3BlZWQSVwoPZW5hYmxlYmxvY2tsaXN0GBEgASgLMj4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBJeChlpbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoGBIgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBJbChJzZW5pb3JfbW9kZV9zd2l0Y2gYEyABKAsyPy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBJkChdhaV9yZWNvbW1lbmRlZF9sZXZlbF92MhgUIAEoCzJDLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhJTCg5lbmFibGVfaGVyZF9kbRgVIAEoCzI7LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SVgoPYmxvY2t0b3BfYm90dG9tGBYgASgLMj0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEkoKCWRvbWFpbl92MhgXIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW5WMhJHCgdkZW5zaXR5GBggASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURlbnNpdHkSVAoOc3VidGl0bGVfcHJvb2YYGSABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3VidGl0bGVQcm9vZhJQCgxwZW9wbGVfcHJvb2YYGiABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YiLwoLRG1TZWdDb25maWcSEQoJcGFnZV9zaXplGAEgASgDEg0KBXRvdGFsGAIgASgDIpECChBEbVNlZ01vYmlsZVJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUSQAoHYWlfZmxhZxgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VBSUZsYWcSFQoNc2VnbWVudF9ydWxlcxgEIAMoAxJCCgxjb2xvcmZ1bF9zcmMYBSADKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsEhMKC2NvbnRleHRfc3JjGAYgASgJIsoBCg5EbVNlZ01vYmlsZVJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAxIWCg50ZWVuYWdlcnNfbW9kZRgFIAEoBRIKCgJwcxgGIAEoAxIKCgJwZRgHIAEoAxIRCglwdWxsX21vZGUYCCABKAUSEgoKZnJvbV9zY2VuZRgJIAEoBRINCgVzcG1pZBgKIAEoCRITCgtjb250ZXh0X2V4dBgLIAEoCSJcCg1EbVNlZ090dFJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUiTAoLRG1TZWdPdHRSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEhUKDXNlZ21lbnRfaW5kZXgYBCABKAMiXQoNRG1TZWdTREtSZXBseRIOCgZjbG9zZWQYASABKAgSPAoFZWxlbXMYAiADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbSJMCgtEbVNlZ1NES1JlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJ3CglEbVN1YlZpZXcSDAoEdHlwZRgBIAEoBRILCgNvaWQYAiABKAMSCwoDcGlkGAMgASgDEkIKC3Bvc3RfcGFuZWwyGAQgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjIioQkKC0RtVmlld1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI5CgRtYXNrGAIgASgLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9NYXNrEkEKCHN1YnRpdGxlGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9TdWJ0aXRsZRITCgtzcGVjaWFsX2RtcxgEIAMoCRJECgdhaV9mbGFnGAUgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWdDb25maWcSTgoNcGxheWVyX2NvbmZpZxgGIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyVmlld0NvbmZpZxIWCg5zZW5kX2JveF9zdHlsZRgHIAEoBRINCgVhbGxvdxgIIAEoCBIRCgljaGVja19ib3gYCSABKAgSGgoSY2hlY2tfYm94X3Nob3dfbXNnGAogASgJEhgKEHRleHRfcGxhY2Vob2xkZXIYCyABKAkSGQoRaW5wdXRfcGxhY2Vob2xkZXIYDCABKAkSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GA0gAygJEkEKC2V4cG9fcmVwb3J0GA4gASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb1JlcG9ydBJJCg9idXp6d29yZF9jb25maWcYDyABKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZENvbmZpZxJCCgtleHByZXNzaW9ucxgQIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYESADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgSIAMoCRJCCgtwb3N0X3BhbmVsMhgTIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEkIKDGRtX21hc2tfd2FsbBgUIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGwSPQoHZG1faGVyZBgVIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtSGVyZFZpZXcSOgoHY29tbWFuZBgWIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmQSCgoCa3YYFyABKAkSPgoJc3ViX3ZpZXdzGBggAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgZIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8ibQoJRG1WaWV3UmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRINCgVzcG1pZBgEIAEoCRIUCgxpc19oYXJkX2Jvb3QYBSABKAUSEwoLY29udGV4dF9leHQYBiABKAkigQYKDkRtV2ViVmlld1JlcGx5Eg0KBXN0YXRlGAEgASgFEgwKBHRleHQYAiABKAkSEQoJdGV4dF9zaWRlGAMgASgJEj0KBmRtX3NnZRgEIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnQ29uZmlnEkEKBGZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxITCgtzcGVjaWFsX2RtcxgGIAMoCRIRCgljaGVja19ib3gYByABKAgSDQoFY291bnQYCCABKAMSQAoLY29tbWFuZF9kbXMYCSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0STQoNcGxheWVyX2NvbmZpZxgKIAEoCzI2LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnEh0KFXJlcG9ydF9maWx0ZXJfY29udGVudBgLIAMoCRJCCgtleHByZXNzaW9ucxgMIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYDSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgOIAMoCRJCCgtwb3N0X3BhbmVsMhgPIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEj4KCXN1Yl92aWV3cxgQIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU3ViVmlldxI2CgNxb2UYESABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Rb2VJbmZvIioKCkV4cG9SZXBvcnQSHAoUc2hvdWxkX3JlcG9ydF9hdF9lbmQYASABKAgiZAoKRXhwcmVzc2lvbhIPCgdrZXl3b3JkGAEgAygJEgsKA3VybBgCIAEoCRI4CgZwZXJpb2QYAyADKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QZXJpb2QiSQoLRXhwcmVzc2lvbnMSOgoEZGF0YRgBIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb24iKgoZSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCCInCgVMYWJlbBINCgV0aXRsZRgBIAEoCRIPCgdjb250ZW50GAIgAygJIocBCgdMYWJlbFYyEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkSFQoNZXhwb3N1cmVfb25jZRgDIAEoCBJFCg1leHBvc3VyZV90eXBlGAQgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIiQKBlBlcmlvZBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMiMAofUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBINCgV2YWx1ZRgBIAEoBSIyCiFQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjISDQoFdmFsdWUYASABKAUiMQogUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrYm90dG9tEg0KBXZhbHVlGAEgASgIIisKGlBsYXllckRhbm1ha3VCbG9ja2NvbG9yZnVsEg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tzY3JvbGwSDQoFdmFsdWUYASABKAgiKgoZUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBINCgV2YWx1ZRgBIAEoCCImChVQbGF5ZXJEYW5tYWt1QmxvY2t0b3ASDQoFdmFsdWUYASABKAgiLAobUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VEZW5zaXR5Eg0KBXZhbHVlGAEgASgFIiQKE1BsYXllckRhbm1ha3VEb21haW4SDQoFdmFsdWUYASABKAIiJgoVUGxheWVyRGFubWFrdURvbWFpblYyEg0KBXZhbHVlGAEgASgFIioKGVBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SDQoFdmFsdWUYASABKAgiLQocUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBINCgV2YWx1ZRgBIAEoCCIlChRQbGF5ZXJEYW5tYWt1T3BhY2l0eRINCgV2YWx1ZRgBIAEoAiIpChhQbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YSDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISDQoFdmFsdWUYASABKAIiLgodUGxheWVyRGFubWFrdVNlbmlvck1vZGVTd2l0Y2gSDQoFdmFsdWUYASABKAUiIwoSUGxheWVyRGFubWFrdVNwZWVkEg0KBXZhbHVlGAEgASgFIisKGlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mEg0KBXZhbHVlGAEgASgIIjgKE1BsYXllckRhbm1ha3VTd2l0Y2gSDQoFdmFsdWUYASABKAgSEgoKY2FuX2lnbm9yZRgCIAEoCCIoChdQbGF5ZXJEYW5tYWt1U3dpdGNoU2F2ZRINCgV2YWx1ZRgBIAEoCCIuCh1QbGF5ZXJEYW5tYWt1VXNlRGVmYXVsdENvbmZpZxINCgV2YWx1ZRgBIAEoCCKMAwoJUG9zdFBhbmVsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIQCghwcmlvcml0eRgDIAEoAxIOCgZiaXpfaWQYBCABKAMSRAoIYml6X3R5cGUYBSABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkMKDGNsaWNrX2J1dHRvbhgGIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uEj8KCnRleHRfaW5wdXQYByABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXQSPQoJY2hlY2tfYm94GAggASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tCb3gSNgoFdG9hc3QYCSABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdCKtBAoLUG9zdFBhbmVsVjISDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEkQKCGJpel90eXBlGAMgASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsQml6VHlwZRJFCgxjbGlja19idXR0b24YBCABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DbGlja0J1dHRvblYyEkEKCnRleHRfaW5wdXQYBSABKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXRWMhI/CgljaGVja19ib3gYBiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveFYyEjgKBXRvYXN0GAcgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RWMhI6CgZidWJibGUYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGVWMhI4CgVsYWJlbBgJIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsVjISQQoLcG9zdF9zdGF0dXMYCiABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0U3RhdHVzIhcKB1FvZUluZm8SDAoEaW5mbxgBIAEoCSIpCghSZXNwb25zZRIMCgRjb2RlGAEgASgFEg8KB21lc3NhZ2UYAiABKAki+QIKDFN1YnRpdGxlSXRlbRIKCgJpZBgBIAEoAxIOCgZpZF9zdHIYAiABKAkSCwoDbGFuGAMgASgJEg8KB2xhbl9kb2MYBCABKAkSFAoMc3VidGl0bGVfdXJsGAUgASgJEjoKBmF1dGhvchgGIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlVzZXJJbmZvEjwKBHR5cGUYByABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZVR5cGUSFQoNbGFuX2RvY19icmllZhgIIAEoCRJBCgdhaV90eXBlGAkgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVR5cGUSRQoJYWlfc3RhdHVzGAogASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVN0YXR1cyLoAgoJVGV4dElucHV0EhwKFHBvcnRyYWl0X3BsYWNlaG9sZGVyGAEgAygJEh0KFWxhbmRzY2FwZV9wbGFjZWhvbGRlchgCIAMoCRJBCgtyZW5kZXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSGAoQcGxhY2Vob2xkZXJfcG9zdBgEIAEoCBIMCgRzaG93GAUgASgIEjgKBmF2YXRhchgGIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchJBCgtwb3N0X3N0YXR1cxgHIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMSNgoFbGFiZWwYCCABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5MYWJlbCL7AQoLVGV4dElucHV0VjISHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEjgKBmF2YXRhchgFIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchIYChB0ZXh0X2lucHV0X2xpbWl0GAYgASgFIm8KBVRvYXN0EgwKBHRleHQYASABKAkSEAoIZHVyYXRpb24YAiABKAUSDAoEc2hvdxgDIAEoCBI4CgZidXR0b24YBCABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXR0b24iYgoNVG9hc3RCdXR0b25WMhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlInMKB1RvYXN0VjISDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRJICg90b2FzdF9idXR0b25fdjIYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdEJ1dHRvblYyIlwKCFVzZXJJbmZvEgsKA21pZBgBIAEoAxIMCgRuYW1lGAIgASgJEgsKA3NleBgDIAEoCRIMCgRmYWNlGAQgASgJEgwKBHNpZ24YBSABKAkSDAoEcmFuaxgGIAEoBSJTCglWaWRlb01hc2sSCwoDY2lkGAEgASgDEgwKBHBsYXQYAiABKAUSCwoDZnBzGAMgASgFEgwKBHRpbWUYBCABKAMSEAoIbWFza191cmwYBSABKAkicAoNVmlkZW9TdWJ0aXRsZRILCgNsYW4YASABKAkSDwoHbGFuX2RvYxgCIAEoCRJBCglzdWJ0aXRsZXMYAyADKAsyLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUl0ZW0ikgEKDlZpZXdIZXJkRG1FbGVtEhAKCGhlcmRfbXNnGAEgASgJEhYKDmhlcmRfc3RhcnRfY250GAIgASgFEhQKDGhlcmRfZW5kX2NudBgDIAEoBRISCgpyZWdleF9ydWxlGAQgASgJEhYKDnN0YXJ0X3Byb2dyZXNzGAUgASgFEhQKDGVuZF9wcm9ncmVzcxgGIAEoBSozCgpBdmF0YXJUeXBlEhIKDkF2YXRhclR5cGVOb25lEAASEQoNQXZhdGFyVHlwZU5GVBABKlkKCkJ1YmJsZVR5cGUSEgoOQnViYmxlVHlwZU5vbmUQABIZChVCdWJibGVUeXBlQ2xpY2tCdXR0b24QARIcChhCdWJibGVUeXBlRG1TZXR0aW5nUGFuZWwQAipYCgxDaGVja2JveFR5cGUSFAoQQ2hlY2tib3hUeXBlTm9uZRAAEhkKFUNoZWNrYm94VHlwZUVuY291cmFnZRABEhcKE0NoZWNrYm94VHlwZUNvbG9yRE0QAio1Cg5EbUNvbG9yZnVsVHlwZRIMCghOb25lVHlwZRAAEhUKD1ZpcEdyYWR1YWxDb2xvchDh1AMqYAoRRG1NYXNrV2FsbEJpelR5cGUSCwoHVW5rbm93bhAAEgcKA09HVhABEgoKBkJpelBpYxACEggKBE11dGUQAxIKCgZSZWNvcmQQBBIJCgVDbG91ZBAFEggKBEFJR0MQBip2ChVEbU1hc2tXYWxsQ29udGVudFR5cGUSIAocRG1NYXNrV2FsbENvbnRlbnRUeXBlVW5rbm93bhAAEh0KGURtTWFza1dhbGxDb250ZW50VHlwZVRleHQQARIcChhEbU1hc2tXYWxsQ29udGVudFR5cGVQaWMQAio8CgxFeHBvc3VyZVR5cGUSFAoQRXhwb3N1cmVUeXBlTm9uZRAAEhYKEkV4cG9zdXJlVHlwZURNU2VuZBABKoMCChBQb3N0UGFuZWxCaXpUeXBlEhgKFFBvc3RQYW5lbEJpelR5cGVOb25lEAASHQoZUG9zdFBhbmVsQml6VHlwZUVuY291cmFnZRABEhsKF1Bvc3RQYW5lbEJpelR5cGVDb2xvckRNEAISGQoVUG9zdFBhbmVsQml6VHlwZU5GVERNEAMSHQoZUG9zdFBhbmVsQml6VHlwZUZyYWdDbG9zZRAEEh0KGVBvc3RQYW5lbEJpelR5cGVSZWNvbW1lbmQQBRIcChhQb3N0UGFuZWxCaXpUeXBlUGxvdExlYWsQBhIiCh5Qb3N0UGFuZWxCaXpUeXBlQW50aUhhcmFzc21lbnQQByo4CgpQb3N0U3RhdHVzEhQKEFBvc3RTdGF0dXNOb3JtYWwQABIUChBQb3N0U3RhdHVzQ2xvc2VkEAEqTgoKUmVuZGVyVHlwZRISCg5SZW5kZXJUeXBlTm9uZRAAEhQKEFJlbmRlclR5cGVTaW5nbGUQARIWChJSZW5kZXJUeXBlUm90YXRpb24QAio2ChBTdWJ0aXRsZUFpU3RhdHVzEggKBE5vbmUQABIMCghFeHBvc3VyZRABEgoKBkFzc2lzdBACKisKDlN1YnRpdGxlQWlUeXBlEgoKBk5vcm1hbBAAEg0KCVRyYW5zbGF0ZRABKh4KDFN1YnRpdGxlVHlwZRIGCgJDQxAAEgYKAkFJEAEqTgoRVG9hc3RGdW5jdGlvblR5cGUSGQoVVG9hc3RGdW5jdGlvblR5cGVOb25lEAASHgoaVG9hc3RGdW5jdGlvblR5cGVQb3N0UGFuZWwQATKgBQoCRE0ScwoLRG1TZWdNb2JpbGUSMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ01vYmlsZVJlcRoyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVwbHkSZAoGRG1WaWV3EisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVxGi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVwbHkScQoORG1QbGF5ZXJDb25maWcSMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVBsYXllckNvbmZpZ1JlcRoqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlc3BvbnNlEmoKCERtU2VnT3R0Ei0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdPdHRSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcGx5EmoKCERtU2VnU0RLEi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdTREtSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcGx5EnQKDERtRXhwb1JlcG9ydBIxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlcRoxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlc0LUAQokY29tLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxQgdEbVByb3RvUAGiAgRCQ1NEqgIgQmlsaWJpbGkuQ29tbXVuaXR5LlNlcnZpY2UuRG0uVjHKAiBCaWxpYmlsaVxDb21tdW5pdHlcU2VydmljZVxEbVxWMeICLEJpbGliaWxpXENvbW11bml0eVxTZXJ2aWNlXERtXFYxXEdQQk1ldGFkYXRh6gIkQmlsaWJpbGk6OkNvbW11bml0eTo6U2VydmljZTo6RG06OlYxYgZwcm90bzM`),_e=d(E,30),ve=d(E,39),D=Z(e=>async(t,n)=>{let r=n??await t.makeChunk({}),a=p(ve,new Uint8Array(e)).commandDms;return await r.upsertDanmakus(a.map(e=>{let t=`def_bili+${s.fromBili({cid:e.oid}).toString()}`,n=s.fromBili({mid:e.mid}),a={SOID:t,progress:e.progress,mode:`Ext`,fontsize:i.fontsize,color:i.color,senderID:n.toString(),content:e.content,ctime:new Date(`${e.ctime} GMT+0800`),weight:11,pool:`Adv`,attr:[`Protect`],platform:`bili`,extra:{bili:{dmid:e.idStr,attr:e.attr,mid:e.mid?.toString(),command:e}}};return{...a,DMID:r.$UniDB.DMIDGenerator(a)}})),r}),O=$({type:`bili.cmd.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{try{return e.import(D(await h(t,`bin`)))}catch{return null}}}});function ye(e,t){return t===`ms`?!0:t===`s`?!1:e<1e8}function k(e,t){return typeof e==`number`||typeof e==`bigint`?ye(e,t)?new Date(Number(e)):new Date(Number(e)*1e3):typeof e==`string`?/^\d+n$/.test(e)?k(Number(e.slice(0,-1)),t):k(Number(e),t):e}const be=e=>{let t=[];do t.unshift(!!(e&1)),e>>=1;while(e);return t.toReversed()};var xe=class{bin;constructor(e){this.bin=e}set1(e){this.bin|=1<<e}set0(e){this.bin&=~(1<<e)}};const Se={fromBin(e=0,t){let n=be(e),r=[];return t===`bili`&&(n[0]&&r.push(`Protect`),n[1]&&r.push(`FromLive`),n[2]&&r.push(`HighLike`)),r},toBin(e=[],t){let n=new xe(0);return t===`bili`&&(e.includes(`Protect`)&&n.set1(0),e.includes(`FromLive`)&&n.set1(1),e.includes(`HighLike`)&&n.set1(2)),n.bin}};function A(e,t,n,r){t.oid&&!n&&(n=t.oid);let i=r||`def_bili+${s.fromBili({cid:n}).toString()}`,a=s.validateString(t.midHash)?t.midHash:s.fromBili({midHash:t.midHash}).toString(),o,c=_.in.safeParse(t.pool).success?t.pool:0,l={bili:{mode:t.mode,pool:t.pool,dmid:t.idStr??t.id.toString(),attr:t.attr,mid:t.mid?.toString(),adv:void 0,code:void 0,bas:void 0}};switch(t.mode){case 4:o=1;break;case 5:o=2;break;case 6:o=3;break;case 7:o=4,l.bili.adv=t.content;break;case 8:o=4,l.bili.code=t.content;break;case 9:o=4,l.bili.bas=t.content;break;default:o=0;break}let u={...t,SOID:i,mode:o,senderID:a,ctime:k(t.ctime,`s`),weight:t.weight||+(c===3),pool:c,attr:Se.fromBin(t.attr,`bili`),platform:`bili`,extra:l};return{...u,mode:g.decode(o),pool:_.decode(c),DMID:e.$UniDB.DMIDGenerator({...u,mode:g.decode(o),pool:_.decode(c)})}}const j=(e,t)=>{switch(e){case`Normal`:return 1;case`Bottom`:return 4;case`Top`:return 5;case`Reverse`:return 6;case`Ext`:return t?t.adv?7:t.code?8:t.bas?9:1:1;default:return 1}};function M(e,t,n){if(n?.skipBiliCommand&&t.extra?.bili?.command)return null;let r=t.extra?.bili?.mode||j(t.mode,t.extra?.bili),i;switch(r){case 7:i=t.extra?.bili?.adv;break;case 8:i=t.extra?.bili?.code;break;case 9:i=t.extra?.bili?.bas;break;default:i=t.content;break}return{"#text":i??t.content,"@_p":[t.progress/1e3,r,t.fontsize,t.color,t.ctime.getTime()/1e3,t.extra?.bili?.pool||t.pool,n?.avoidSenderIDWithAt?t.senderID.replaceAll(`@bili`,``):t.senderID,t.extra?.bili?.dmid||t.DMID||e(t),t.weight].join(`,`)}}const N=Z(e=>async(t,n)=>{let r=n??await t.makeChunk({}),i=p(_e,new Uint8Array(e)).elems;return await r.upsertDanmakus(i.map(e=>A(r,e))),r}),P=$({type:`bili.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{try{return e.import(N(await h(t,`bin`)))}catch{return null}}}}),F=Z(e=>async(t,n)=>{let r=n??await t.makeChunk({});return await r.upsertDanmakus(e.data.result.map(e=>{let t=e.attrs?e.attrs.split(`,`).map(Number).reduce((e,t)=>e|1<<t-1,0):0;return A(r,{id:BigInt(e.id_str||e.id),idStr:e.id_str,progress:e.progress,mode:e.mode,fontsize:e.fontsize,color:Number.parseInt(e.color,16),mid:e.mid,midHash:e.mid_hash,content:e.msg,ctime:BigInt(e.ctime),pool:e.pool,attr:t,oid:BigInt(e.oid)})})),r}),I=$({type:`bili.up.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return e.import(F(await h(t,`json`,n)))}catch{return null}}}}),Ce=new ae({ignoreAttributes:!1,parseTagValue:!1,parseAttributeValue:!1,isArray:(e,t,n,r)=>t===`i.d`}),we=new oe({ignoreAttributes:!1});function Te(e,t){let n=e.split(`,`);return{content:t,progress:~~(Number.parseFloat(n[0])*1e3),mode:Number.parseInt(n[1]),fontsize:Number.parseInt(n[2]),color:Number.parseInt(n[3]),ctime:BigInt(n[4]),pool:Number.parseInt(n[5]),midHash:n[6],id:BigInt(n[7]),idStr:n[7],weight:Number.parseInt(n[8])}}const L=Z(e=>async(t,n)=>{let r=Ce.parse(e),i=r.i.d,a=!!r.i.danuni,o=BigInt(r.i.chatid),s=a?r.i.danuni?.data:void 0,c=n??await t.makeChunk({fromConverted:a});return await c.upsertDanmakus(i.map(e=>A(c,Te(e[`@_p`],e[`#text`]),o,s))),c}),Ee=(e,t)=>{if(e){let n=s.fromStringSafe(e);if(n.domain===`bili`){let e=n.id.replaceAll(`def_bili+`,``);if(e)return e}return t?.cid||e}else return t?.cid||s.fromNull().toString()},De=e=>Q((t,n)=>{let r=t;if(e?.avoidSenderIDWithAt&&!r.every(e=>e.senderID.endsWith(`@bili`)))throw Error(`存在其他来源的senderID,请关闭该功能再试!`);let i=r.map(t=>M(n.DMIDGenerator,t,e));return e?.skipBiliCommand&&(i=i.filter(e=>e!==null)),we.build({"?xml":{"@_version":`1.0`,"@_encoding":`UTF-8`},i:{chatserver:`chat.bilibili.com`,chatid:Ee(r[0]?.SOID),mission:0,maxlimit:r.length,state:0,real_name:0,source:`k-v`,danuni:{...a,data:[...new Set(r.map(e=>e.SOID))][0]},d:i}})}),R=$({type:`bili.xml`,ext:[`.xml`],check:{adapter:async(e,t)=>{try{return e.import(L(await h(t,`string`)))}catch{return null}}}});function z(e,t){let n=`Normal`;switch(t){case`bili`:switch(e){case 4:n=`Bottom`;break;case 5:n=`Top`;break;case 6:n=`Reverse`;break;case 7:n=`Ext`;break;case 8:n=`Ext`;break;case 9:n=`Ext`;break}break;case`dplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`artplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`ddplay`:n=z(e,`bili`);break;case`vod`:e===`top`?n=`Top`:e===`bottom`&&(n=`Bottom`);break;default:n=`Normal`;break}return n}const B=Z((e,t,n=`other`)=>async(r,a)=>{let o=a??await r.makeChunk({fromConverted:!!e.danuni}),c=t?s.fromUnknown(t,n).toString():s.fromNull(n).toString(),l=s.fromNull(n).toString(),u=new Date;return await o.upsertDanmakus(e.danmuku.map(e=>{let t=e.border?{artplayer:{border:e.border,style:{}}}:null;e.style&&(t=t?{...t,artplayer:{...t.artplayer,border:e.border,style:e.style}}:{artplayer:{border:e.border,style:e.style}});let r=z(e.mode??0,`artplayer`),a={attr:i.attr,fontsize:i.fontsize,ctime:u,weight:i.weight,pool:`Def`,content:e.text,progress:(e.time??0)*1e3,mode:r,color:Number((e.color||`FFFFFF`).replace(`#`,`0x`)),style:e.style,SOID:c,senderID:l,platform:n,extra:t};return{...a,DMID:o.$UniDB.DMIDGenerator(a)}})),o}),V=Q(e=>({danuni:{...a,data:e[0]?.SOID.split(`@`)[0]},danmuku:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),{text:e.content,time:e.progress/1e3,mode:t,color:`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,border:e.extra?.artplayer?.border,style:e.extra?.artplayer?.style}})})),H=$({type:`artplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return await e.import(B(await h(t,`json`))),B}catch{return null}}}}),U=Z((e,t=`0`,n=`ddplay`)=>async(r,a)=>{let o=a??await r.makeChunk({fromConverted:!!e.danuni}),c=s.fromUnknown(`def_ddplay+${t}`,n).toString(),l=new Date;return await o.upsertDanmakus(e.comments.map(e=>{let t=e.p.split(`,`),r=t[3],a=s.fromUnknown(r,n).toString(),u=z(Number.parseInt(t[1]),`ddplay`),d={SOID:c,color:Number.parseInt(t[2]),progress:Number.parseFloat(t[0])*1e3,mode:u,senderID:a,content:e.m,platform:n,extra:{ddplay:{cid:e.cid,uid:r}},attr:i.attr,fontsize:i.fontsize,ctime:l,weight:i.weight,pool:`Def`};return{...d,DMID:o.$UniDB.DMIDGenerator(d)}})),o}),W=Q(e=>({danuni:{...a,data:e[0]?.SOID.split(`@`)[0].replaceAll(`def_ddplay+`,``)},count:e.length,comments:e.map(e=>{let t=1;return e.mode===`Top`?t=5:e.mode===`Bottom`&&(t=4),{cid:e.extra?.ddplay?.cid??Number.parseInt(`0x${Buffer.from(e.DMID).toString(`hex`)}`)??0,p:`${e.progress/1e3},${t},${e.color},${e.extra?.ddplay?.uid??e.senderID}`,m:e.content}})})),G=$({type:`ddplay.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return await e.import(U(await h(t,`json`))),U}catch{return null}}}}),K=Z((e,t,n=`other`)=>async(r,a)=>{let o=a??await r.makeChunk({fromConverted:!!e.danuni}),c=t?s.fromUnknown(t,n).toString():s.fromNull(n).toString(),l=new Date;return await o.upsertDanmakus(e.data.map(([e,t,r,a,u])=>{let d=z(t,`dplayer`),f={attr:i.attr,fontsize:i.fontsize,ctime:l,weight:i.weight,extra:i.extra,pool:`Def`,progress:e*1e3,mode:d,color:r,midHash:a,content:u,SOID:c,senderID:s.fromUnknown(a,n).toString(),platform:n};return{...f,DMID:o.$UniDB.DMIDGenerator(f)}})),o}),Oe=Q(e=>({code:0,danuni:{...a,data:e[0]?.SOID.split(`@`)[0]},data:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),[e.progress/1e3,t,e.color,e.senderID,e.content]})})),ke=$({type:`dplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return await e.import(K(await h(t,`json`))),K}catch{return null}}}});function Ae(e){return e===2?`Top`:e===3?`Bottom`:`Normal`}const je=l.object({color:l.string(),gradient_colors:l.tuple([l.string(),l.string()]),position:l.number()}),Me=l.string().transform(e=>{try{let t=JSON.parse(e);return je.parse(t)}catch{return}}).transform(e=>({gradient:e?.gradient_colors?[Number(`0x${e.gradient_colors[0]}`),Number(`0x${e.gradient_colors[1]}`)]:void 0,mode:Ae(e?.position)})),q=`tencent`,J=Z((e,t)=>async(n,r)=>{let a=r??await n.makeChunk({fromConverted:!1}),o=t?s.fromUnknown(t,q).toString():s.fromNull(q).toString(),c=s.fromNull(q).toString(),l=Array.isArray(e?.barrage_list)?e.barrage_list:[];return await a.upsertDanmakus(l.map(e=>{let t=Me.parse(e.content_style),n={...e};delete n.content,delete n.time_offset,delete n.create_time;let r={attr:i.attr,fontsize:i.fontsize,ctime:k(e.create_time,`s`),weight:e.show_weight??i.weight,pool:`Def`,content:e.content,progress:Number.parseInt(e.time_offset)||0,mode:t.mode,color:t.gradient?.[0]??i.color,SOID:o,senderID:c,platform:q,extra:{danuni:{color:{gradient:t.gradient}},tencent:n}};return{...r,DMID:a.$UniDB.DMIDGenerator(r)}})),a}),Ne=$({type:`tencent.json`,ext:[`.json`],check:{adapter:async(e,t)=>{try{return await e.import(J(await h(t,`json`))),J}catch{return null}}}}),Y=l.object({code:l.number(),name:l.string(),danum:l.number(),danmuku:l.array(l.tuple([l.coerce.number().min(0),l.union([l.literal(`right`),l.literal(`top`),l.literal(`bottom`)]),l.string().toUpperCase().regex(/^#([0-9a-fA-F]{3}){1,2}$/,{error:`Invalid hex color format`}).transform(e=>e.length>6?e.toUpperCase():`#${e.split(`#`)[1].toUpperCase()}`),l.string().prefault(``),l.string(),l.string().prefault(``).optional(),l.string().prefault(``).optional(),l.string().regex(/^\d+px$/).optional()]).rest(l.any()))}),X=Z((e,t,n=`other`)=>async(r,a)=>{let o=a??await r.makeChunk({fromConverted:!1}),c=t?s.fromUnknown(t,n).toString():s.fromNull(n).toString(),l=s.fromNull(n).toString(),u=new Date;return await o.upsertDanmakus(e.danmuku.slice(-e.danum).map(e=>{let t={...i,pool:`Def`,ctime:u,SOID:c,senderID:l,progress:~~(e[0]*1e3),mode:z(e[1],`vod`),color:Number((e[2]||`FFFFFF`).replace(`#`,`0x`)),content:e[4],fontsize:e[7]?Number(e[7].replace(`px`,``)):i.fontsize};return{...t,DMID:o.$UniDB.DMIDGenerator(t)}})),o}),Pe=Q(e=>({danuni:{...a,data:e[0]?.SOID.split(`@`)[0]},code:0,name:e[0]?.SOID??`unknown`,danum:e.length,danmuku:e.map(e=>{let t=`right`;switch(e.mode){case`Top`:t=`top`;break;case`Bottom`:t=`bottom`;break}return[e.progress/1e3,t,`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,``,e.content,``,``,`${e.fontsize}px`]})})),Fe=$({type:`vod.json`,ext:[`.json`],check:{body:e=>Y.safeParse(e).success?X:null,adapter:async(e,t)=>{try{return await e.import(X(await h(t,`json`))),X}catch{return null}}}});var Ie=e({ArtplayerAdapter:()=>B,ArtplayerMetadata:()=>H,ArtplayerTransformer:()=>V,BiliCommandGrpcAdapter:()=>D,BiliCommandGrpcMetadata:()=>O,BiliCommonBuilder:()=>M,BiliCommonModeRec:()=>j,BiliCommonParser:()=>A,BiliGrpcAdapter:()=>N,BiliGrpcMetadata:()=>P,BiliUpAdapter:()=>F,BiliUpMetadata:()=>I,BiliXmlAdapter:()=>L,BiliXmlMetadata:()=>R,BiliXmlTransformerConfigurator:()=>De,DanuniJsonAdapter:()=>y,DanuniJsonMetadata:()=>x,DanuniJsonTransformerConfigurator:()=>b,DanuniPbAdapter:()=>w,DanuniPbMetadata:()=>T,DanuniPbTransformer:()=>ge,DdplayAdapter:()=>U,DdplayMetadata:()=>G,DdplayTransformer:()=>W,DplayerAdapter:()=>K,DplayerMetadata:()=>ke,DplayerTransformer:()=>Oe,TencentAdapter:()=>J,TencentMetadata:()=>Ne,VodAdapter:()=>X,VodMetadata:()=>Fe,VodTransformer:()=>Pe,VodZod:()=>Y,defineAdapter:()=>Z,defineMetadata:()=>$,definePlugin:()=>Le,defineTransformer:()=>Q,enumAttrsCodec:()=>v,enumModeCodec:()=>g,enumPoolCodec:()=>_});function Z(e){return e}function Q(e){return e}function Le(e){return e}function $(e){return e}export{P as A,g as B,De as C,j as D,M as E,ge as F,h as H,y as I,x as L,O as M,w as N,A as O,T as P,b as R,R as S,I as T,_ as V,W as _,Q as a,V as b,Pe as c,Ne as d,K as f,G as g,U as h,Le as i,D as j,N as k,Y as l,Oe as m,Z as n,X as o,ke as p,$ as r,Fe as s,Ie as t,J as u,B as v,F as w,L as x,H as y,v as z};
2
- //# sourceMappingURL=adapters-n4ZeTSYX.js.map