@dan-uni/dan-any 2.2.5 → 2.2.7

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 (41) hide show
  1. package/README.md +25 -25
  2. package/dist/{adapters-n4ZeTSYX.js → adapters-DyPi0Ovp.js} +2 -2
  3. package/dist/{adapters-n4ZeTSYX.js.map → adapters-DyPi0Ovp.js.map} +1 -1
  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/utils.d.ts +1 -1
  8. package/dist/core/main/drizzle.d.ts +3 -3
  9. package/dist/core/main/drizzle.js +1 -1
  10. package/dist/core/main/pure.d.ts +1 -1
  11. package/dist/core/main/pure.js +1 -1
  12. package/dist/core/main.d.ts +1 -1
  13. package/dist/core/main.js +1 -1
  14. package/dist/{core-D1XUOSXa.js → core-B_Xz2TOM.js} +2 -2
  15. package/dist/{core-D1XUOSXa.js.map → core-B_Xz2TOM.js.map} +1 -1
  16. package/dist/core.d.ts +3 -3
  17. package/dist/core.js +1 -1
  18. package/dist/{dm-extra--BY805J3.d.ts → dm-extra-8pmLcNuD.d.ts} +10 -2
  19. package/dist/dm-extra-8pmLcNuD.d.ts.map +1 -0
  20. package/dist/{index-DPxMOW6E.d.ts → index-CyibNSYQ.d.ts} +3 -3
  21. package/dist/{index-DPxMOW6E.d.ts.map → index-CyibNSYQ.d.ts.map} +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/{isSame-MiM4wHvK.js → isSame-MJPVYSu6.js} +2 -2
  25. package/dist/{isSame-MiM4wHvK.js.map → isSame-MJPVYSu6.js.map} +1 -1
  26. package/dist/{main-drizzle-QIklYdJq.js → main-drizzle-BDIJgzcV.js} +2 -2
  27. package/dist/{main-drizzle-QIklYdJq.js.map → main-drizzle-BDIJgzcV.js.map} +1 -1
  28. package/dist/{main-pure-BTqDH2ll.js → main-pure-DjgrVyr8.js} +2 -2
  29. package/dist/{main-pure-BTqDH2ll.js.map → main-pure-DjgrVyr8.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/plugins.d.ts +67 -4
  33. package/dist/plugins.d.ts.map +1 -1
  34. package/dist/plugins.js +1 -1
  35. package/dist/plugins.js.map +1 -1
  36. package/dist/{schema-B08Jk3HR.d.ts → schema-D_OmIr-T.d.ts} +2 -2
  37. package/dist/{schema-B08Jk3HR.d.ts.map → schema-D_OmIr-T.d.ts.map} +1 -1
  38. package/dist/utils.d.ts +2 -2
  39. package/dist/utils.js +1 -1
  40. package/package.json +1 -1
  41. package/dist/dm-extra--BY805J3.d.ts.map +0 -1
@@ -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-DjgrVyr8.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,4 +1,4 @@
1
- import { $ as UDanmaku, J as ChunksInsert, Q as UChunk2Danmaku, St as DMIDGenerator, Tt as Promisable, X as InitedUniDB$1, Y as DanmakusInsert, Z as UChunk, a as TransformerInput, et as UniChunk$1, i as Transformer, nt as baseClassTrans$1, q as AdapterStore, r as Plugin, tt as UniDB$1, wt as Asyncify } from "./index-DPxMOW6E.js";
1
+ import { $ as UDanmaku, J as ChunksInsert, Q as UChunk2Danmaku, St as DMIDGenerator, Tt as Promisable, X as InitedUniDB$1, Y as DanmakusInsert, Z as UChunk, a as TransformerInput, et as UniChunk$1, i as Transformer, nt as baseClassTrans$1, q as AdapterStore, r as Plugin, tt as UniDB$1, wt as Asyncify } from "./index-CyibNSYQ.js";
2
2
  import { t as Simplify } from "./simplify-d7VEIjlJ.js";
3
3
 
4
4
  //#region src/utils/serialMap.d.ts
@@ -147,4 +147,4 @@ declare class UniChunk implements UniChunk$1 {
147
147
  }
148
148
  //#endregion
149
149
  export { main_pure_d_exports as a, initNewDb as i, UniChunk as n, UniDB as r, InitedUniDB as t };
150
- //# sourceMappingURL=main-pure-BVFJVQIq.d.ts.map
150
+ //# sourceMappingURL=main-pure-DkKNyAz1.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main-pure-BVFJVQIq.d.ts","names":[],"sources":["../src/utils/serialMap.ts","../src/core/main-pure.ts"],"mappings":"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"}
1
+ {"version":3,"file":"main-pure-DkKNyAz1.d.ts","names":[],"sources":["../src/utils/serialMap.ts","../src/core/main-pure.ts"],"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"./chunk-DK3Fl9T5.js";import{n as t}from"./core-B_Xz2TOM.js";import{danmakusSelectZod as n}from"./core/db/schema.js";import{a as r,i}from"./adapters-DyPi0Ovp.js";import{t as a}from"./isSame-MJPVYSu6.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":"6NAMA,MAAa,EAAmB,EAAmB,GAAc,EAAU,MAAM,ECEpE,GAAuC,CAClD,UACA,WAIE,CAAC,IACH,EAAa,KAA2B,IAA0B,CAChE,AAAc,IAAU,CAAC,EACzB,AAAc,IAAU,CAAC,EACzB,IAAM,EAAS,GAAmB,GAAS,SAAS,CAAC,GAAK,CAAC,GAAS,SAAS,CAAC,EACxE,EAAW,MAAM,EAAS,UAAU,EAAQ,CAAE,IAAK,EAAK,CAAC,EA8B/D,OA7BA,MAAM,EAAM,gBACT,MAAM,EAAO,WAAW,IAAK,GAAM,CAClC,GAAI,CAAC,EAAE,MAAO,OAAO,EACrB,IAAI,EAAS,CACX,GAAG,EACH,KAAM,MAEN,SAAU,qBACZ,EAEA,GAAI,EAAM,QAAQ,GAAK,EAAE,OAAO,OAAQ,CACtC,IAAM,EAAS,EAAE,MAAM,OACnB,EAAO,QACT,EAAO,QAAU,GAAG,EAAO,QAAQ,IAAI,EAAO,MAAM,QAExD,MAAO,GAAI,EAAM,MAAM,GAAK,EAAE,OAAO,KAAM,CACzC,IAAM,EAAO,EAAE,MAAM,KACjB,EAAK,OAAS,GAAK,EAAK,IAC1B,EAAO,QAAU,WAAW,KAAK,MAAM,EAAK,GAAG,EAAE,IAAM,KAC9C,EAAK,UAEd,EAAO,QAAU,WADD,EAAK,QACe,UACpC,EAAO,SAAW,GAEtB,CAEA,OADA,EAAO,KAAK,KAAK,YAAY,EACtB,CAAE,GAAG,EAAQ,KAAM,EAAM,OAAO,cAAc,CAAM,CAAE,CAC/D,CAAC,CACH,EACO,CACT,CAAC,EC9CkB,EAAkB,KAAK,CAC1C,QAAS,GACT,KAAM,GACN,KAAM,GACN,SAAU,GACV,MAAO,GACP,SAAU,GACV,OAAQ,GACR,KAAM,GACN,SAAU,EACZ,CAAC,EAGD,MAAa,EACX,GAEA,EAAkB,eAAgB,EAAW,CAE3C,IAAM,EAAW,CAAC,EACZ,EAAqC,GAAW,CACpD,IAAM,EAAU,IAAI,IACpB,IAAK,IAAM,KAAO,EAAW,CAC3B,IAAM,EAAM,EAAI,GAChB,EAAQ,IAAI,GAAM,EAAQ,IAAI,CAAG,GAAK,GAAK,CAAC,CAC9C,CACA,EAAS,GAAO,CAClB,EACA,IAAK,IAAM,KAAO,EAChB,EAAa,CAAG,EAElB,OAAO,CACT,CAAC,EAEH,SAAgB,EAAwC,EAAyB,CAC/E,GAAI,EAAQ,OAAS,EAAG,MAAO,CAAE,IAAK,IAAA,GAAW,MAAO,CAAE,EAC1D,IAAI,EACA,EAAW,EACf,IAAK,GAAM,CAAC,EAAK,KAAU,EAAQ,QAAQ,EACrC,EAAQ,IACV,EAAW,EACX,EAAU,GAGd,MAAO,CAAE,IAAK,EAAS,MAAO,CAAS,CACzC,CCtCA,MAAa,GAA2B,EAAW,IACjD,EAAa,KAA2B,IAA0B,CAChE,IAAM,EAAW,MAAM,EAAS,UAAU,EAAQ,CAAE,IAAK,EAAK,CAAC,EACzD,EAAiB,CAAC,GAAI,MAAM,EAAO,SAAU,EAAE,MAClD,EAAG,IAAM,EAAE,SAAW,EAAE,UAAY,EAAE,MAAM,QAAQ,EAAI,EAAE,MAAM,QAAQ,CAC3E,EAEA,GAAI,GAAY,EAEd,OADA,MAAM,EAAM,eAAe,EAAgB,EAAK,EACzC,EAGT,IAAM,EAAa,EAAW,IACxB,EAAW,GACf,CAAC,EAAE,KAAM,EAAE,QAAS,EAAE,KAAM,EAAE,KAAM,EAAE,UAAY,EAAE,EAAE,KAAK,GAAG,EAU1D,EAAS,IAAI,IACb,EAA8B,CAAC,EAErC,IAAK,IAAM,KAAO,EAAgB,CAChC,IAAM,EAAM,EAAQ,CAAG,EACjB,EAAS,EAAO,IAAI,CAAG,GAAK,CAAC,EAC/B,EAEJ,IAAK,IAAI,EAAQ,EAAO,OAAS,EAAG,GAAS,EAAG,IAAS,CACvD,IAAM,EAAY,EAAO,GACzB,GAAI,EAAI,SAAW,EAAU,aAAe,EAAY,MACxD,GAAI,EAAO,EAAU,KAAM,CAAG,EAAG,CAC/B,EAAU,EACV,KACF,CACF,CAEA,GAAI,EAAS,CACX,EAAQ,QAAQ,KAAK,CAAG,EACxB,EAAQ,aAAe,EAAI,SACtB,EAAQ,UAAU,IAAI,EAAI,QAAQ,IACrC,EAAQ,UAAU,IAAI,EAAI,QAAQ,EAClC,EAAQ,QAAQ,KAAK,EAAI,QAAQ,GAEnC,QACF,CAEA,IAAM,EAAwB,CAC5B,KAAM,EACN,aAAc,EAAI,SAClB,QAAS,CAAC,EAAI,QAAQ,EACtB,UAAW,IAAI,IAAI,CAAC,EAAI,QAAQ,CAAC,EACjC,QAAS,CAAC,CAAG,CACf,EACA,EAAO,KAAK,CAAS,EACrB,EAAO,IAAI,EAAK,CAAM,EACtB,EAAc,KAAK,CAAS,CAC9B,CA6DA,OA3DA,MAAM,EAAM,eACV,EAAc,IAAK,GAAU,CAC3B,GAAI,EAAM,QAAQ,SAAW,EAC3B,OAAO,EAAM,KAGf,IAAM,EAAQ,CACZ,SAAU,EAAM,aAAe,EAAM,KAAK,SAC1C,MAAO,EAAM,QAAQ,OACrB,QAAS,EAAM,QACf,YAAa,EAAM,QAAQ,OAC3B,cAAe,EAAM,OACvB,EACI,EAAsB,EAAM,KAAK,MACjC,CACE,GAAG,EAAM,KAAK,MACd,OAAQ,CACN,GAAI,EAAM,KAAK,MAAM,OAAS,EAAM,KAAK,MAAM,OAAS,CAAC,EACzD,OACF,CACF,EACA,CACE,OAAQ,CACN,OACF,CACF,EACJ,GAAI,EAAM,QAAQ,SAAW,EAAG,CAC9B,IAAM,EAAS,EAAM,OACrB,GAAI,GAAQ,MAAO,CACjB,GAAM,CAAE,MAAO,EAAQ,GAAG,GAAe,EACzC,GAAI,OAAO,KAAK,CAAU,EAAE,OAAS,EACnC,EAAQ,CACN,GAAG,EACH,OAAQ,CACV,MACK,CACL,GAAM,CAAE,OAAQ,EAAS,GAAG,GAAc,EAC1C,EAAQ,OAAO,KAAK,CAAS,EAAE,OAAS,EAAI,EAAY,IAC1D,CACF,CACF,CACA,IAAM,EAAO,EAAM,KAAK,KAAK,SAAA,SAAuB,EAChD,EAAM,KAAK,KACX,CAAC,GAAG,EAAM,KAAK,KAAA,SAAoB,EACjC,EAAW,qBAEjB,MAAO,CACL,GAAG,EAAM,KACT,WACA,OACA,QACA,KAAM,EAAM,OAAO,cAAc,CAC/B,GAAG,EAAM,KACT,MAAO,GAAS,OAAO,KAAK,CAAK,EAAE,OAAS,EAAI,EAAQ,KACxD,UACF,CAAC,CACH,CACF,CAAC,CACH,EACO,CACT,CAAC"}
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"./chunk-DK3Fl9T5.js";import{n as t}from"./core-B_Xz2TOM.js";import{H as n}from"./adapters-DyPi0Ovp.js";import{t as r}from"./isSame-MJPVYSu6.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/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.7",
4
4
  "description": "A danmaku transformer lib, supporting danmaku from different platforms.",
5
5
  "keywords": [
6
6
  "bangumi",
@@ -1 +0,0 @@
1
- {"version":3,"file":"dm-extra--BY805J3.d.ts","names":[],"sources":["../src/utils/proto/gen/bilibili/community/service/dm/v1/dm_pb.ts","../src/core/dm-extra.ts"],"mappings":";;;;;;;;KAiXY,SAAA,GAAY,OAAO;;;;;;EAM7B,EAAA;;;;;;EAOA,GAAA;;;;;;EAOA,GAAA;;;;;;EAOA,OAAA;;;;;;EAOA,OAAA;;;;;;EAOA,QAAA;;;;;;EAOA,KAAA;;;;;;EAOA,KAAA;;;;;;EAOA,KAAA;;;;;;EAOA,KAAA;;;;;;EAOA,IAAA;;;;;;EAOA,UAAA;;;;;;EAOA,SAAA;;;;;;EAOA,IAAA;AAAA;;;KChdG,aAAA,GAAgB,SAAuB;AAAA,UAE3B,KAAA;EACf,SAAA,GAAY,cAAA;EACZ,IAAA,GAAO,SAAA;EACP,MAAA,GAAS,WAAA;EACT,MAAA,GAAS,WAAA;EACT,OAAA,GAAU,YAAA;AAAA;AAAA,UAEK,cAAA;EACf,KAAA;EACA,MAAM;AAAA;AAAA,UAES,SAAA;EACf,IAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;EACA,GAAA;EACA,GAAA;EACA,IAAA;EACA,GAAA;EACA,OAAA,GAAU,aAAa;AAAA;AAAA,UAER,WAAA;EACf,KAAA,GAAQ,gBAAA;EACR,GAAA,GAAM,cAAA;EACN,KAAA,GAAQ,gBAAA;AAAA;AAAA,UAEO,gBAAA;EACf,QAAA;EACA,KAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;AAAA;AAAA,UAEe,cAAA;EACf,OAAO;AAAA;AAAA,UAEQ,gBAAA;EACf,QAAA,IAAY,KAAA,UAAe,GAAA;AAAA;AAAA,UAEZ,WAAA;EACf,GAAA;EACA,GAAG;AAAA;AAAA,UAEY,YAAA;EACf,EAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,SAAA;EACA,aAAA;EACA,eAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,aAAA;EACA,WAAA;EACA,UAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;AAAA"}