@dan-uni/dan-any 2.2.1 → 2.2.3

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 (68) hide show
  1. package/dist/adapters-fLeXFQo5.js +2 -0
  2. package/dist/adapters-fLeXFQo5.js.map +1 -0
  3. package/dist/{adapters.d.mts → adapters.d.ts} +1 -1
  4. package/dist/adapters.js +1 -0
  5. package/dist/core/db/{schema.d.mts → schema.d.ts} +1 -1
  6. package/dist/core/db/{schema.mjs → schema.js} +1 -1
  7. package/dist/core/db/schema.js.map +1 -0
  8. package/dist/core/db/utils.d.ts +2 -0
  9. package/dist/core/db/utils.js +1 -0
  10. package/dist/core/main/drizzle.d.ts +2 -0
  11. package/dist/core/main/drizzle.js +1 -0
  12. package/dist/core/main/pure.d.ts +2 -0
  13. package/dist/core/main/pure.js +1 -0
  14. package/dist/core-BY1OZeA0.js +2 -0
  15. package/dist/core-BY1OZeA0.js.map +1 -0
  16. package/dist/{core.d.mts → core.d.ts} +2 -2
  17. package/dist/core.js +1 -0
  18. package/dist/{db-f5FA8dbM.mjs → db-CK9ddboZ.js} +2 -2
  19. package/dist/db-CK9ddboZ.js.map +1 -0
  20. package/dist/{dm-extra-6EjI8V-C.d.mts → dm-extra-6EjI8V-C.d.ts} +1 -1
  21. package/dist/dm-extra-6EjI8V-C.d.ts.map +1 -0
  22. package/dist/{index-DLr9qdb5.d.mts → index-BkX7YMvk.d.ts} +2 -2
  23. package/dist/{index-DLr9qdb5.d.mts.map → index-BkX7YMvk.d.ts.map} +1 -1
  24. package/dist/{index-CIOKEu88.d.mts → index-DNKg1_Eq.d.ts} +5 -5
  25. package/dist/index-DNKg1_Eq.d.ts.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.js +1 -0
  28. package/dist/isSame-Cm4iMLE0.js +2 -0
  29. package/dist/isSame-Cm4iMLE0.js.map +1 -0
  30. package/dist/{plugins.d.mts → plugins.d.ts} +3 -3
  31. package/dist/plugins.d.ts.map +1 -0
  32. package/dist/plugins.js +2 -0
  33. package/dist/plugins.js.map +1 -0
  34. package/dist/{schema-CUhPWl_o.d.mts → schema-Bdq3bWGY.d.ts} +2 -2
  35. package/dist/schema-Bdq3bWGY.d.ts.map +1 -0
  36. package/dist/{utils.d.mts → utils.d.ts} +10 -16
  37. package/dist/utils.d.ts.map +1 -0
  38. package/dist/utils.js +2 -0
  39. package/dist/utils.js.map +1 -0
  40. package/package.json +15 -15
  41. package/dist/adapters-CJpzHbZe.mjs +0 -2
  42. package/dist/adapters-CJpzHbZe.mjs.map +0 -1
  43. package/dist/adapters.mjs +0 -1
  44. package/dist/core/db/schema.mjs.map +0 -1
  45. package/dist/core/db/utils.d.mts +0 -2
  46. package/dist/core/db/utils.mjs +0 -1
  47. package/dist/core/main/drizzle.d.mts +0 -2
  48. package/dist/core/main/drizzle.mjs +0 -1
  49. package/dist/core/main/pure.d.mts +0 -2
  50. package/dist/core/main/pure.mjs +0 -1
  51. package/dist/core-D9Qw3QS-.mjs +0 -2
  52. package/dist/core-D9Qw3QS-.mjs.map +0 -1
  53. package/dist/core.mjs +0 -1
  54. package/dist/db-f5FA8dbM.mjs.map +0 -1
  55. package/dist/dm-extra-6EjI8V-C.d.mts.map +0 -1
  56. package/dist/index-CIOKEu88.d.mts.map +0 -1
  57. package/dist/index.d.mts +0 -4
  58. package/dist/index.mjs +0 -1
  59. package/dist/isSame-C-pceqgH.mjs +0 -2
  60. package/dist/isSame-C-pceqgH.mjs.map +0 -1
  61. package/dist/plugins.d.mts.map +0 -1
  62. package/dist/plugins.mjs +0 -2
  63. package/dist/plugins.mjs.map +0 -1
  64. package/dist/schema-CUhPWl_o.d.mts.map +0 -1
  65. package/dist/utils.d.mts.map +0 -1
  66. package/dist/utils.mjs +0 -2
  67. package/dist/utils.mjs.map +0 -1
  68. /package/dist/{chunk-DK3Fl9T5.mjs → chunk-DK3Fl9T5.js} +0 -0
@@ -1,2 +0,0 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.mjs";import{chunk2danmakus as t,chunks as n,danmakus as r,onConflictDoUpdate as i}from"./core/db/schema.mjs";import{i as a,n as o,r as s,t as c}from"./db-f5FA8dbM.mjs";import{eq as l}from"drizzle-orm";import{z as u}from"zod";import{sha3_256 as d}from"@noble/hashes/sha3.js";import f from"json-bigint";import{bytesToHex as p,utf8ToBytes as m}from"@noble/hashes/utils.js";var h=`@dan-uni/dan-any`,g=`2.2.1`;let _=function(e){return e.Bangumi=`bgm`,e.TMDB=`tmdb`,e}({});const v=Object.values(_);let y=function(e){return e.Acfun=`acfun`,e.Baha=`baha`,e.Bilibili=`bili`,e.BilibiliGlobal=`bglobal`,e.Iqiyi=`iqiyi`,e.Tencent=`tencent`,e.Youku=`youku`,e}({});const b=Object.values(y);let x=function(e){return e.DanDanPlay=`ddplay`,e.TuCao=`tucao`,e}({});const S=Object.values(x),C=[...b,...S],w=[...v,...C],T=u.templateLiteral([u.string(),`@`,u.string()]);var E=class e{id;domain;constructor(e,t){this.id=e,this.domain=t}static validateString(e){return T.safeParse(e).success}static fromStringSafe(e){return this.fromString(T.parse(e))}static fromString(t){let[n,r]=t.split(`@`);return new e(n,r)}toString(){return`${this.id}@${this.domain}`}static fromNull(t){return new e(t===`runtime`?`runtime`:`anonymous`,t||`danuni`)}static fromBili({cid:t,mid:n,midHash:r}){return t?new e(t.toString(),`bili`):n?new e(n.toString(),`bili`):r?new e(r,`bili`):this.fromNull(`bili`)}static fromUnknown(t,n){return t?new e(t,n):this.fromNull(n)}};let D=function(e){return e[e.Normal=0]=`Normal`,e[e.Bottom=1]=`Bottom`,e[e.Top=2]=`Top`,e[e.Reverse=3]=`Reverse`,e[e.Ext=4]=`Ext`,e}({}),O=function(e){return e[e.Def=0]=`Def`,e[e.Sub=1]=`Sub`,e[e.Adv=2]=`Adv`,e[e.Ix=3]=`Ix`,e}({}),k=function(e){return e.Protect=`Protect`,e.FromLive=`FromLive`,e.HighLike=`HighLike`,e.Compatible=`Compatible`,e.Reported=`Reported`,e.Unchecked=`Unchecked`,e.HasEvent=`HasEvent`,e.Hide=`Hide`,e}({});const A={SOID:E.fromNull().toString(),progress:0,mode:0,fontsize:25,color:16777215,senderID:E.fromNull().toString(),content:``,weight:0,pool:0,attr:[],platform:null,extra:null},j={meassage:`Converted by DanUni!`,version:`JS/TS ${h} (v${g})`},M=f({useNativeBigInt:!0}),N=(e,t=8)=>{let n=m([e.SOID,e.progress,e.mode,e.fontsize,e.color,e.senderID,e.content,e.ctime.toISOString(),e.weight,e.pool,e.attr.toSorted().join(`,`),e.platform??null,M.stringify(e.extra)].join(`|`));return p(d.create().update(n).digest()).slice(0,t)};function*P(e,t){let n=2**16-2,r=e[0]?Object.keys(e[0]).length:1,i=Math.floor(n/r);(!t||t>i)&&(t=i);for(let n=0;n<e.length;n+=t)yield e.slice(n,n+t)}var F=e({InitedUniDB:()=>R,UniChunk:()=>z,UniDB:()=>I}),I=class{$db;DMIDGenerator;__isUniDB=!0;constructor(e=o,t=N){this.$db=e,this.DMIDGenerator=t}async init(e){return new R(await a(e),this.DMIDGenerator)}async close(){this.$db=null,await c()}};async function L(e,t){t=t.map(e=>{let t=e.content;return e.content=t.replace(/[\x00-\x1F\x7F]/g,``),e.content!==t&&(e.extra={...e.extra,danuni:{...e.extra?.danuni,raw:{...e.extra?.danuni?.raw,content:Buffer.from(t,`utf8`).toString(`base64`)}}}),e});for(let n of P(t,2340))await e.$db.insert(r).values(n).onConflictDoUpdate(i.danmakus)}var R=class extends I{$db;DMIDGenerator;__isInitedUniDB=!0;constructor(e,t=N){super(e,t),this.$db=e,this.DMIDGenerator=t}async dump(){return await s(this.$db)}get $chunks(){return Promise.resolve(this.$db.query.chunks.findMany())}get $danmakus(){return Promise.resolve(this.$db.query.chunks.findFirst({with:{danmakus:!0}}).then(e=>e?.danmakus??[]))}async listChunks(){return(await this.$chunks).map(e=>new z(this,e.id))}async makeChunk(e){let t=await this.$db.insert(n).values(e).returning();return new z(this,t[0].id)}async upsertDanmakus(e,t=!0){if(e instanceof Map)await this.upsertDanmakus([...e.values()],!1);else if(t){let t=new Map;e.forEach(e=>{t.set(e.DMID,e)}),await L(this,[...t.values()])}else await L(this,e)}async shrink(){let e=await this.$db.query.chunks.findMany({where:{tmp:!0}});for(let t of e)await new z(this,t.id).delete()}import(e){return e(this)}async export(e){return e(await this.$danmakus,{DMIDGenerator:this.DMIDGenerator})}},z=class e{$UniDB;id;__isUniChunk=!0;constructor(e,t){this.$UniDB=e,this.id=t}get $db(){return this.$UniDB.$db}static async makeChunk(e,t){return e instanceof R?e.makeChunk(t):e.$UniDB.makeChunk(t)}static async assign(t,r){if(r.length<1)return t;let i=t.$UniDB,a=t.id,o=(await t.$chunk()).fromConverted;for(let e of r){let n=await e.$chunk();o&&=!!n.fromConverted;let r=await e.$danmakus;await t.upsertDanmakus(r,!1),await e.delete()}return await i.$db.update(n).set({fromConverted:o}).where(l(n.id,a)),new e(i,a)}static async compare(e,t){let n=await e.$danmakus,r=await t.$danmakus;if(n.length!==r.length)return!1;let i=new Set;for(let e of n)i.add(e.DMID);for(let e of r){let t=i.has(e.DMID);if(!t||JSON.stringify(t)!==JSON.stringify(e))return!1}return!0}get $chunks(){return this.$db.select().from(n).where(l(n.id,this.id))}async $chunk(){return(await this.$chunks)[0]}get $danmakus(){return this.$db.query.chunks.findFirst({where:{id:this.id},with:{danmakus:!0}}).then(e=>e?.danmakus??[])}get $count(){return this.$db.$count(t,l(t.chunkID,this.id))}get isDeleted(){return this.$chunks.then(e=>e.length===0)}async upsertDanmakus(e,n=!1,r=!0){let i=new Set;e instanceof Map?(await this.$UniDB.upsertDanmakus([...e.values()],!1),e.forEach(e=>i.add(e.DMID))):(n?e=e.map(e=>{let t=this.$UniDB.DMIDGenerator(e);return i.add(t),{...e,DMID:t}}):e.forEach(e=>{i.add(e.DMID)}),await this.$UniDB.upsertDanmakus(e,r));for(let e of P([...i].map(e=>({chunkID:this.id,DMID:e})),2340))await this.$db.insert(t).values(e).onConflictDoNothing()}import(e){return e(this.$UniDB,this)}async export(e){return e(await this.$danmakus,{DMIDGenerator:this.$UniDB.DMIDGenerator,uchunk:await this.$chunk()})}plugin(e){return e(this)}async delete(){await this.$db.transaction(async e=>{let i=(await e.select().from(t).where(l(t.chunkID,this.id))).map(e=>e.DMID);await e.delete(t).where(l(t.chunkID,this.id));for(let n of i)(await e.select().from(t).where(l(t.DMID,n))).length===0&&await e.delete(r).where(l(r.DMID,n));await e.delete(n).where(l(n.id,this.id))})}},B=class e{#e=new Map;#t=[];#n=0;get nextSerial(){return this.#t.length>0?this.#t.shift():this.#n++}add(e){return this.#e.set(this.nextSerial,e),this}delete(e){let t=this.#e.delete(e);return t&&this.#t.push(e),t}clear(){this.#e.clear(),this.#t=[],this.#n=0}toJSON(){return{$typeName:`SerialMap`,"#map":this.#e.entries().toArray(),"#freeSerials":this.#t,"#nextSerial":this.#n}}static fromJSON(t){if(t.$typeName!==`SerialMap`)throw Error(`Invalid data for SerialMap`);let n=new e;return n.#e=new Map(t[`#map`]),n.#t=t[`#freeSerials`],n.#n=t[`#nextSerial`],n}get size(){return this.#e.size}has(...e){return this.#e.has(...e)}get(...e){return this.#e.get(...e)}set(...e){return this.#e.set(...e),this}getOrInsert(...e){return this.#e.getOrInsert(...e)}getOrInsertComputed(...e){return this.#e.getOrInsertComputed(...e)}forEach(...e){return this.#e.forEach(...e)}keys(...e){return this.#e.keys(...e)}values(...e){return this.#e.values(...e)}entries(...e){return this.#e.entries(...e)}[Symbol.iterator](){return this.#e[Symbol.iterator]()}get[Symbol.toStringTag](){return`SerialMap`}},V=class e{#e=new Map;#t=[];#n=0n;get nextSerial(){return this.#t.length>0?this.#t.shift():this.#n++}add(e){return this.#e.set(this.nextSerial,e),this}delete(e){let t=this.#e.delete(e);return t&&this.#t.push(e),t}clear(){this.#e.clear(),this.#t=[],this.#n=0n}toJSON(){return{$typeName:`BigSerialMap`,"#map":this.#e.entries().map(([e,t])=>[e.toString(),t]).toArray(),"#freeSerials":this.#t.map(e=>e.toString()),"#nextSerial":this.#n.toString()}}static fromJSON(t){if(t.$typeName!==`BigSerialMap`)throw Error(`Invalid data for BigSerialMap`);let n=new e;return n.#e=new Map(t[`#map`].map(([e,t])=>[BigInt(e),t])),n.#t=t[`#freeSerials`].map(BigInt),n.#n=BigInt(t[`#nextSerial`]),n}get size(){return this.#e.size}has(...e){return this.#e.has(...e)}get(...e){return this.#e.get(...e)}set(...e){return this.#e.set(...e),this}getOrInsert(...e){return this.#e.getOrInsert(...e)}getOrInsertComputed(...e){return this.#e.getOrInsertComputed(...e)}forEach(...e){return this.#e.forEach(...e)}keys(...e){return this.#e.keys(...e)}values(...e){return this.#e.values(...e)}entries(...e){return this.#e.entries(...e)}[Symbol.iterator](){return this.#e[Symbol.iterator]()}get[Symbol.toStringTag](){return`BigSerialMap`}},H=e({InitedUniDB:()=>q,UniChunk:()=>J,UniDB:()=>G,initNewDb:()=>W});const U={danmakus:new Map,chunks:new B,chunk2danmakus:new V};function W(){return{...U}}var G=class{$db;DMIDGenerator;__isUniDB=!0;constructor(e=U,t=N){this.$db=e,this.DMIDGenerator=t}init(e){return e?this.$db={danmakus:new Map(e.danmakus.map(e=>[e.DMID,e])),chunks:B.fromJSON(e.chunks),chunk2danmakus:V.fromJSON(e.chunk2danmakus)}:this.$db=U,new q(this.$db,this.DMIDGenerator)}close(){this.$db={danmakus:new Map,chunks:new B,chunk2danmakus:new V}}};function K(e,t){t.forEach(t=>{let n=t.content;t.content=n.replace(/[\x00-\x1F\x7F]/g,``),t.content!==n&&(t.extra={...t.extra,danuni:{...t.extra?.danuni,raw:{...t.extra?.danuni?.raw,content:Buffer.from(n,`utf8`).toString(`base64`)}}}),e.$db.danmakus.set(t.DMID,{...t,platform:t.platform??null})})}var q=class extends G{$db;DMIDGenerator;__isInitedUniDB=!0;constructor(e,t=N){super(e,t),this.$db=e,this.DMIDGenerator=t}dump(){return{danmakus:[...this.$db.danmakus.values()],chunks:this.$db.chunks.toJSON(),chunk2danmakus:this.$db.chunk2danmakus.toJSON()}}get $chunks(){return[...this.$db.chunks.values()]}get $danmakus(){return[...this.$db.danmakus.values()]}listChunks(){return this.$chunks.map(e=>new J(this,e.id))}makeChunk(e){let t=this.$db.chunks.nextSerial;return this.$db.chunks.set(t,{id:t,fromConverted:e.fromConverted??!1,tmp:e.tmp??!1}),new J(this,t)}upsertDanmakus(e,t=!0){if(e instanceof Map)this.upsertDanmakus([...e.values()],!1);else if(t){let t=new Map;e.forEach(e=>{t.set(e.DMID,e)}),K(this,[...t.values()])}else K(this,e)}shrink(){let e=this.$db.chunks.values().filter(e=>e.tmp);for(let t of e)new J(this,t.id).delete()}import(e){return e(this)}export(e){return e(this.$danmakus,{DMIDGenerator:this.DMIDGenerator})}},J=class e{$UniDB;id;__isUniChunk=!0;constructor(e,t){this.$UniDB=e,this.id=t}get $db(){return this.$UniDB.$db}static makeChunk(e,t){return e instanceof q?e.makeChunk(t):e.$UniDB.makeChunk(t)}static assign(t,n){if(n.length<1)return t;let r=t.id,i=t.$chunk(),a=i.fromConverted;for(let e of n){let n=e.$chunk();a&&=!!n.fromConverted,t.upsertDanmakus(e.$danmakus,!1),e.delete()}return t.$db.chunks.set(r,{...i,fromConverted:a}),new e(t.$UniDB,r)}static compare(e,t){let n=e.$danmakus,r=t.$danmakus;if(n.length!==r.length)return!1;let i=new Set;for(let e of n)i.add(e.DMID);for(let e of r){let t=i.has(e.DMID);if(!t||JSON.stringify(t)!==JSON.stringify(e))return!1}return!0}get $chunks(){let e=this.$db.chunks.get(this.id);return e?[e]:[]}$chunk(){return this.$chunks[0]}get $danmakus(){return[...this.$db.chunk2danmakus.values().filter(e=>e.chunkID===this.id).map(e=>this.$db.danmakus.get(e.DMID)).filter(e=>!!e)]}get $count(){return this.$db.chunk2danmakus.values().filter(e=>e.chunkID===this.id).reduce(e=>e+1,0)}get isDeleted(){return!this.$db.chunks.has(this.id)}upsertDanmakus(e,t=!1,n=!0){let r=new Set;e instanceof Map?(this.$UniDB.upsertDanmakus([...e.values()],!1),e.forEach(e=>r.add(e.DMID))):(t?e=e.map(e=>{let t=this.$UniDB.DMIDGenerator(e);return r.add(t),{...e,DMID:t}}):e.forEach(e=>{r.add(e.DMID)}),this.$UniDB.upsertDanmakus(e,n)),r.forEach(e=>{let t=this.$db.chunk2danmakus.nextSerial;this.$db.chunk2danmakus.set(t,{id:t,chunkID:this.id,DMID:e})})}import(e){return e(this.$UniDB,this)}export(e){return e(this.$danmakus,{DMIDGenerator:this.$UniDB.DMIDGenerator,uchunk:this.$chunk()})}plugin(e){return e(this)}delete(){let e=new Set;this.$db.chunk2danmakus.forEach(t=>{t.chunkID===this.id&&(e.add(t.DMID),this.$db.chunk2danmakus.delete(t.id))}),e.forEach(e=>{this.$db.chunk2danmakus.values().some(t=>t.DMID===e)||this.$db.danmakus.delete(e)}),this.$db.chunks.delete(this.id)}},Y=e({DMAttr:()=>k,DanUniConvertTipTemplate:()=>j,InitedUniDB:()=>Z,Modes:()=>D,PlatformDanmakuOnlySource:()=>x,PlatformDanmakuOnlySources:()=>S,PlatformDanmakuSources:()=>C,PlatformInfoSource:()=>_,PlatformInfoSources:()=>v,PlatformSources:()=>w,PlatformVideoSource:()=>y,PlatformVideoSources:()=>b,Pools:()=>O,UniChunk:()=>Q,UniDB:()=>X,UniID:()=>E,createDMID:()=>N,defaultUniDM:()=>A,main:()=>$}),X=class{$db;DMIDGenerator;__isUniDB=!0;static[Symbol.hasInstance](e){return e?.__isUniDB===!0}constructor(e,t=N){this.$db=e,this.DMIDGenerator=t}},Z=class extends X{$db;DMIDGenerator;__isInitedUniDB=!0;static[Symbol.hasInstance](e){return e?.__isInitedUniDB===!0}constructor(e,t=N){super(e,t),this.$db=e,this.DMIDGenerator=t}},Q=class{$UniDB;id;__isUniChunk=!0;static[Symbol.hasInstance](e){return e?.__isUniChunk===!0}constructor(e,t){this.$UniDB=e,this.id=t}static makeChunk(e,t){return e instanceof Z?e.makeChunk(t):e.$UniDB.makeChunk(t)}static assign(e,t){throw Error(`应当调用相应环境的实现`)}static async compare(e,t){let n=await e.$danmakus,r=await t.$danmakus;if(n.length!==r.length)return!1;let i=new Set;for(let e of n)i.add(e.DMID);for(let e of r){let t=i.has(e.DMID);if(!t||JSON.stringify(t)!==JSON.stringify(e))return!1}return!0}};const $={drizzle:F,pure:H};export{C,y as D,w as E,b as O,S,v as T,D as _,$ as a,E as b,G as c,z as d,I as f,j as g,k as h,Y as i,W as l,M as m,Q as n,q as o,N as p,X as r,J as s,Z as t,R as u,O as v,_ as w,x,A as y};
2
- //# sourceMappingURL=core-D9Qw3QS-.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-D9Qw3QS-.mjs","names":["pkg.name","pkg.version","JSON","JSON","UniDB","InitedUniDB","$Private4InitedUniDB_upsertDanmakus","UniChunk","chunksTable","chunks","#freeSerials","#nextSerial","#map","UniDB","InitedUniDB","UniChunk"],"sources":["../package.json","../src/core/platform.ts","../src/core/uni-id.ts","../src/core/dm.ts","../src/utils/bigint.ts","../src/core/id.ts","../src/utils/array2chunk.ts","../src/core/main-drizzle.ts","../src/utils/serialMap.ts","../src/core/main-pure.ts","../src/core/index.ts"],"sourcesContent":["","export enum PlatformInfoSource {\n Bangumi = \"bgm\",\n TMDB = \"tmdb\",\n}\nexport const PlatformInfoSources = Object.values(PlatformInfoSource);\n\nexport enum PlatformVideoSource {\n Acfun = \"acfun\",\n Baha = \"baha\",\n Bilibili = \"bili\",\n BilibiliGlobal = \"bglobal\",\n Iqiyi = \"iqiyi\",\n Tencent = \"tencent\",\n Youku = \"youku\",\n}\nexport const PlatformVideoSources = Object.values(PlatformVideoSource);\n\nexport enum PlatformDanmakuOnlySource {\n DanDanPlay = \"ddplay\",\n TuCao = \"tucao\",\n}\nexport const PlatformDanmakuOnlySources = Object.values(PlatformDanmakuOnlySource);\n\nexport type PlatformDanmakuSource = PlatformVideoSource | PlatformDanmakuOnlySource;\nexport const PlatformDanmakuSources = [...PlatformVideoSources, ...PlatformDanmakuOnlySources];\n\nexport type PlatformSource = PlatformInfoSource | PlatformDanmakuSource;\nexport const PlatformSources = [...PlatformInfoSources, ...PlatformDanmakuSources];\n","import { z } from \"zod\";\nimport { type PlatformSource, PlatformVideoSource } from \"./platform.ts\";\n\nconst UniIDStrSchema = z.templateLiteral([z.string(), \"@\", z.string()]);\ntype UniIDStr = z.infer<typeof UniIDStrSchema>;\n\nexport class UniID {\n constructor(\n /**\n * @description 每个domain下应为唯一值\n * @example danuni: 推荐为UUID/ULID/NanoID\n * bili: midHash hash算法为CRC32\n */\n public id: string,\n /**\n * @description 弹幕首次出现的平台域名(注意可以为如localhost等根域名)\n * ### 预设\n * - `{any}.danuni` (若使用IP或无域名,请使用该domain,防止隐私泄露/无法解析)\n * #### 注意\n * - `any`值建议为UUID/ULID/NanoID以防同步错误\n * ### 非DanUni弹幕服务建议使用预设,或自行填写域名\n */\n public domain: PlatformSource | string,\n ) {}\n static validateString(str: string) {\n return UniIDStrSchema.safeParse(str).success;\n }\n static fromStringSafe(str: string) {\n return this.fromString(UniIDStrSchema.parse(str));\n }\n static fromString(str: UniIDStr) {\n const [id, domain] = str.split(\"@\");\n return new UniID(id, domain);\n }\n toString(): UniIDStr {\n return `${this.id}@${this.domain}`;\n }\n static fromNull(domain?: PlatformSource | string) {\n return new UniID(domain === \"runtime\" ? \"runtime\" : \"anonymous\", domain || \"danuni\");\n }\n static fromBili({\n cid,\n mid,\n midHash,\n }: {\n cid?: number | bigint | string;\n mid?: number | bigint;\n midHash?: string;\n }) {\n if (cid) return new UniID(cid.toString(), PlatformVideoSource.Bilibili);\n else if (mid) return new UniID(mid.toString(), PlatformVideoSource.Bilibili);\n else if (midHash) return new UniID(midHash, PlatformVideoSource.Bilibili);\n else return this.fromNull(PlatformVideoSource.Bilibili);\n }\n static fromUnknown(\n id: string,\n /**\n * 可使用预设\n */\n domain: PlatformSource | string,\n ) {\n if (id) return new UniID(id, domain);\n else return this.fromNull(domain);\n }\n}\n","import type { PlatformDanmakuSource } from \"./platform.ts\";\n\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { UniID } from \"./uni-id.ts\";\nimport type { Extra } from \"./dm-extra.ts\";\n\nexport enum Modes {\n Normal,\n Bottom,\n Top,\n Reverse, //逆向弹幕\n Ext, //需要读取extra的弹幕,用于兼容bili等复杂弹幕\n}\nexport enum Pools {\n Def, //默认池\n Sub, //重要池,建议强制加载,含字幕、科普、空降等\n Adv, //高级弹幕专用池,均需读取extra\n Ix, //互动池\n}\nexport enum DMAttr {\n Protect = \"Protect\",\n FromLive = \"FromLive\",\n HighLike = \"HighLike\",\n Compatible = \"Compatible\", // 由dan-any进行过兼容处理的弹幕,可能丢失部分信息\n Reported = \"Reported\", // 在DanUni上被多人举报过的弹幕\n Unchecked = \"Unchecked\", // 在DanUni上未被审核过的弹幕\n HasEvent = \"HasEvent\", // 该弹幕当前在DanUni上存在事件(如点赞/举报等)\n Hide = \"Hide\", // 由于其它原因需要隐藏的弹幕(建议在server端不返回该类弹幕)\n}\n\nexport interface UniDMObj {\n SOID: string;\n progress: number; // int32, ms\n mode: Modes;\n fontsize: number;\n color: number;\n senderID: string;\n content: string;\n ctime: Date;\n weight: number;\n pool: Pools;\n attr: DMAttr[];\n platform: PlatformDanmakuSource | string | null;\n extra: Extra | null;\n // extraStr: string;\n DMID: string;\n}\n\nexport const defaultUniDM = {\n SOID: UniID.fromNull().toString(),\n progress: 0,\n mode: Modes.Normal,\n fontsize: 25,\n color: 0xffffff,\n senderID: UniID.fromNull().toString(),\n content: \"\",\n // ctime: new Date(), // ctime 应根据实际构建时间创建\n weight: 0,\n pool: Pools.Def,\n attr: [] as DMAttr[],\n platform: null,\n extra: null,\n} as const;\n\nexport interface DanUniConvertTip {\n meassage: string;\n version: string;\n data?: string;\n}\n\nexport const DanUniConvertTipTemplate: DanUniConvertTip = {\n meassage: \"Converted by DanUni!\",\n version: `JS/TS ${pkg.name} (v${pkg.version})`,\n};\n","import JSONbig from \"json-bigint\";\n\nexport const JSON = JSONbig({\n useNativeBigInt: true,\n});\n","import { sha3_256 } from \"@noble/hashes/sha3.js\";\nimport { JSON } from \"@/utils/bigint.ts\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport type { UDanmaku } from \"./index.ts\";\n\ntype DMIDGeneratorDanmaku = Omit<UDanmaku, \"DMID\">;\nexport type DMIDGenerator = (dan: DMIDGeneratorDanmaku, slice?: number) => string;\n\nexport const createDMID: DMIDGenerator = (dan: DMIDGeneratorDanmaku, slice = 8) => {\n const raw = [\n dan.SOID, //\n dan.progress,\n dan.mode,\n dan.fontsize, //\n dan.color, //\n dan.senderID,\n dan.content,\n dan.ctime.toISOString(),\n dan.weight, //\n dan.pool,\n dan.attr.toSorted().join(\",\"), //\n dan.platform ?? null,\n JSON.stringify(dan.extra),\n ].join(\"|\");\n const data = utf8ToBytes(raw);\n const digest = sha3_256.create().update(data).digest();\n const str = bytesToHex(digest);\n return str.slice(0, slice);\n};\n","export function* array2chunk<T>(data: readonly T[], size?: number) {\n const MAX_PARAMETERS = Math.pow(2, 16) - 2;\n const parametersPerRecord = data[0] ? Object.keys(data[0]).length : 1;\n const maxSize = Math.floor(MAX_PARAMETERS / parametersPerRecord);\n\n if (!size || size > maxSize) size = maxSize;\n\n for (let i = 0; i < data.length; i += size) {\n yield data.slice(i, i + size);\n }\n}\n","import type { Plugin, Transformer, TransformerInput } from \"@/adapters/index.ts\";\nimport { closeDb, db, dumpDb, initDb } from \"./db/index.ts\";\nimport {\n chunks as chunksTable,\n chunksZod,\n danmakus,\n chunk2danmakus,\n onConflictDoUpdate,\n type DanmakusInsert,\n} from \"./db/schema.ts\";\nimport { eq } from \"drizzle-orm\";\nimport type { Asyncify, Promisable, Simplify } from \"type-fest\";\nimport { createDMID, type DMIDGenerator } from \"./id.ts\";\nimport type { z } from \"zod\";\nimport { array2chunk } from \"@/utils/array2chunk.ts\";\nimport * as base from \"./index.ts\";\n\ntype baseClassTrans<T> = base.baseClassTrans<T, UniDB, InitedUniDB, UniChunk>;\n\nexport class UniDB implements base.UniDB {\n __isUniDB = true;\n constructor(\n public $db = db,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {}\n async init(dump?: File) {\n return new InitedUniDB(await initDb(dump), this.DMIDGenerator);\n }\n async close() {\n this.$db = null;\n await closeDb();\n }\n}\n\nasync function $Private4InitedUniDB_upsertDanmakus(that: InitedUniDB, data: DanmakusInsert[]) {\n data = data.map((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 return d;\n });\n for (const c of array2chunk(data, 2340))\n await that.$db.insert(danmakus).values(c).onConflictDoUpdate(onConflictDoUpdate.danmakus);\n}\n\nexport class InitedUniDB extends UniDB implements base.InitedUniDB {\n __isInitedUniDB = true;\n constructor(\n public $db: NonNullable<UniDB[\"$db\"]>,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {\n super($db, DMIDGenerator);\n }\n async dump() {\n const dump = await dumpDb(this.$db);\n return dump;\n }\n get $chunks() {\n return Promise.resolve(this.$db.query.chunks.findMany());\n }\n get $danmakus() {\n return Promise.resolve(\n this.$db.query.chunks\n .findFirst({\n with: {\n danmakus: true,\n },\n })\n .then((data) => data?.danmakus ?? []),\n );\n }\n async listChunks() {\n const cs = await this.$chunks;\n return cs.map((c) => new UniChunk(this, c.id));\n }\n async makeChunk(data: Omit<z.infer<typeof chunksZod>, \"id\">) {\n const chunk = await this.$db.insert(chunksTable).values(data).returning();\n return new UniChunk(this, chunk[0].id);\n }\n async upsertDanmakus(data: DanmakusInsert[] | Map<string, DanmakusInsert>, dedupeDMID = true) {\n if (data instanceof Map) await this.upsertDanmakus([...data.values()], false);\n else if (dedupeDMID) {\n const map = new Map<string, DanmakusInsert>();\n data.forEach((d) => {\n map.set(d.DMID, d);\n });\n await $Private4InitedUniDB_upsertDanmakus(this, [...map.values()]);\n } else await $Private4InitedUniDB_upsertDanmakus(this, data);\n }\n /**\n * 清理临时chunks\n */\n async shrink() {\n const uchunks = await this.$db.query.chunks.findMany({\n where: {\n tmp: true,\n },\n });\n for (const c of uchunks) await new UniChunk(this, c.id).delete();\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this);\n }\n async export<T extends Transformer>(transformer: T) {\n return <ReturnType<T>>transformer(await 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 async makeChunk(\n u: TransformerInput<InitedUniDB | UniChunk>,\n data: z.infer<typeof chunksZod>,\n ) {\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 async assign(base: UniChunk, chunks: UniChunk[]) {\n if (chunks.length < 1) return base;\n const baseDB = base.$UniDB;\n const targetId = base.id;\n const targetRow = await base.$chunk();\n let newFromConverted = targetRow.fromConverted;\n for (const c of chunks) {\n const srcChunkRow = await c.$chunk();\n newFromConverted = newFromConverted && !!srcChunkRow.fromConverted;\n const srcDanmakus = await c.$danmakus;\n await base.upsertDanmakus(srcDanmakus, false);\n await c.delete();\n }\n await baseDB.$db\n .update(chunksTable)\n .set({ fromConverted: newFromConverted })\n .where(eq(chunksTable.id, targetId));\n return new UniChunk(baseDB, targetId);\n }\n /**\n * 比较两个chunk的弹幕是否相同\n * @description 可用于跨DB比较\n */\n static async compare(u1: UniChunk, u2: UniChunk) {\n const dms1 = await u1.$danmakus;\n const dms2 = await 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 /**\n * 获取当前chunk的数据库记录\n * @description 虽然数组仅会包含一个值,但这里保持数据库原始返回\n */\n get $chunks() {\n return this.$db.select().from(chunksTable).where(eq(chunksTable.id, this.id));\n }\n async $chunk() {\n const c = await this.$chunks;\n return c[0];\n }\n get $danmakus() {\n return this.$db.query.chunks\n .findFirst({\n where: {\n id: this.id,\n },\n with: {\n danmakus: true,\n },\n })\n .then((data) => data?.danmakus ?? []);\n }\n get $count() {\n return this.$db.$count(chunk2danmakus, eq(chunk2danmakus.chunkID, this.id));\n }\n get isDeleted() {\n return this.$chunks.then((cs) => cs.length === 0);\n }\n async upsertDanmakus(\n data: Map<string, DanmakusInsert & { platform: string | null }>,\n autoSetDMID?: false,\n dedupeDMID?: false,\n ): Promise<void>;\n async upsertDanmakus(\n data: Simplify<DanmakusInsert & { DMID: string; platform: string | null }>[],\n autoSetDMID?: false,\n dedupeDMID?: boolean,\n ): Promise<void>;\n async upsertDanmakus(\n data: Simplify<DanmakusInsert & { DMID?: undefined }>[],\n autoSetDMID: true,\n dedupeDMID?: true,\n ): Promise<void>;\n async upsertDanmakus(\n data:\n | (DanmakusInsert & { DMID?: string; platform: string | null })[]\n | Map<string, DanmakusInsert & { platform: string | null }>,\n autoSetDMID = false,\n dedupeDMID = true,\n ) {\n const dmids = new Set<string>();\n if (data instanceof Map) {\n await 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 await this.$UniDB.upsertDanmakus(data, dedupeDMID);\n }\n for (const c of array2chunk(\n [...dmids].map((DMID) => ({ chunkID: this.id, DMID })),\n 2340,\n ))\n await this.$db.insert(chunk2danmakus).values(c).onConflictDoNothing();\n }\n import(adapterStore: base.AdapterStore): Promisable<UniChunk> {\n return <Promisable<UniChunk>>adapterStore(this.$UniDB, this);\n }\n async export<T extends Transformer>(transformer: T) {\n // transformer 格式转换器 不应对数据库执行任何写操作\n return <ReturnType<T>>transformer(await this.$danmakus, {\n DMIDGenerator: this.$UniDB.DMIDGenerator,\n uchunk: await this.$chunk(),\n });\n }\n plugin<T extends Plugin>(plugin: T): baseClassTrans<ReturnType<T>>;\n async 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 async delete() {\n await this.$db.transaction(async (tx) => {\n // 1) 查询当前 chunk 对应的 DMID 列表\n const maps = await tx\n .select()\n .from(chunk2danmakus)\n .where(eq(chunk2danmakus.chunkID, this.id));\n const DMIDs = maps.map((m) => m.DMID);\n // 2) 删除映射关系\n await tx.delete(chunk2danmakus).where(eq(chunk2danmakus.chunkID, this.id));\n // 3) 对于不再被任何 chunk 引用的弹幕,删除它们\n for (const id of DMIDs) {\n const still = await tx.select().from(chunk2danmakus).where(eq(chunk2danmakus.DMID, id));\n if (still.length === 0) {\n await tx.delete(danmakus).where(eq(danmakus.DMID, id));\n }\n }\n // 4) 删除 chunk 本身\n await tx.delete(chunksTable).where(eq(chunksTable.id, this.id));\n });\n }\n}\n","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 type { z } from \"zod\";\nimport type { chunksZod, DanmakusInsert } from \"./db/schema.ts\";\nimport { 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: 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<z.infer<typeof chunksZod>, \"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(data: DanmakusInsert[] | Map<string, DanmakusInsert>, dedupeDMID = true) {\n if (data instanceof Map) this.upsertDanmakus([...data.values()], false);\n else if (dedupeDMID) {\n const map = new Map<string, 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(\n u: TransformerInput<InitedUniDB | UniChunk>,\n data: z.infer<typeof chunksZod>,\n ): 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, DanmakusInsert & { platform: string | null }>,\n autoSetDMID?: false,\n dedupeDMID?: false,\n ): void;\n upsertDanmakus(\n data: Simplify<DanmakusInsert & { DMID: string; platform: string | null }>[],\n autoSetDMID?: false,\n dedupeDMID?: boolean,\n ): void;\n upsertDanmakus(\n data: Simplify<DanmakusInsert & { DMID?: undefined }>[],\n autoSetDMID: true,\n dedupeDMID?: true,\n ): void;\n upsertDanmakus(\n data:\n | (DanmakusInsert & { DMID?: string; platform: string | null })[]\n | Map<string, 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","import type { Plugin, Transformer, TransformerInput } from \"@/adapters/index.ts\";\nimport { db as nullableDb } from \"./db/index.ts\";\nimport { chunksZod, type DanmakusInsert } from \"./db/schema.ts\";\nimport type { Asyncify, Promisable } from \"type-fest\";\nimport type { z } from \"zod\";\n\nexport type AdapterStore = (udb: InitedUniDB, uchunk?: UniChunk) => Promisable<UniChunk>;\n\nconst db = nullableDb as NonNullable<typeof nullableDb>;\ntype UChunks = Awaited<ReturnType<typeof db.query.chunks.findMany>>;\nexport type UChunk = UChunks[number];\ntype UDanmakus = Awaited<ReturnType<typeof db.query.danmakus.findMany>>;\nexport type UDanmaku = UDanmakus[number];\ntype UChunk2Danmakus = Awaited<ReturnType<typeof db.query.chunk2danmakus.findMany>>;\nexport type UChunk2Danmaku = UChunk2Danmakus[number];\n\nexport type baseClassTrans<T, ImplUniDB, ImplInitedUniDB, ImplUniChunk> = baseUniChunkTransX<\n baseInitedUniDBTransX<baseUniDBTransX<T, ImplUniDB>, ImplInitedUniDB>,\n ImplUniChunk\n>;\n\ntype baseUniDBTrans<T, ImplClass> = T extends UniDB ? ImplClass : T;\ntype baseUniDBTransPromise<T, ImplClass> = T extends Promise<UniDB> ? Promise<ImplClass> : T;\ntype baseUniDBTransX<T, ImplClass> = baseUniDBTransPromise<baseUniDBTrans<T, ImplClass>, ImplClass>;\nexport abstract class UniDB {\n __isUniDB = true;\n static [Symbol.hasInstance](obj: any) {\n return obj?.__isUniDB === true;\n }\n constructor(\n public $db: any,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {}\n abstract init(dump?: unknown): Promisable<InitedUniDB>;\n abstract close(): Promisable<void>;\n}\n\ntype baseInitedUniDBTrans<T, ImplClass> = T extends InitedUniDB ? ImplClass : T;\ntype baseInitedUniDBTransPromise<T, ImplClass> =\n T extends Promise<InitedUniDB> ? Promise<ImplClass> : T;\ntype baseInitedUniDBTransX<T, ImplClass> = baseInitedUniDBTransPromise<\n baseInitedUniDBTrans<T, ImplClass>,\n ImplClass\n>;\nexport abstract class InitedUniDB extends UniDB {\n __isInitedUniDB = true;\n static [Symbol.hasInstance](obj: any) {\n return obj?.__isInitedUniDB === true;\n }\n constructor(\n public $db: NonNullable<UniDB[\"$db\"]>,\n public DMIDGenerator: DMIDGenerator = createDMID,\n ) {\n super($db, DMIDGenerator);\n }\n abstract dump(): Promisable<any>;\n abstract get $chunks(): Promisable<UChunks>;\n abstract get $danmakus(): Promisable<UDanmakus>;\n abstract listChunks(): Promisable<UniChunk[]>;\n abstract makeChunk(data: Omit<z.infer<typeof chunksZod>, \"id\">): Promisable<UniChunk>;\n abstract upsertDanmakus(\n data: DanmakusInsert[] | Map<string, DanmakusInsert>,\n dedupeDMID: boolean,\n ): Promisable<void>;\n /**\n * 清理临时chunks\n */\n abstract shrink(): Promisable<void>;\n abstract import(adapterStore: AdapterStore): Promisable<UniChunk>;\n abstract export<T extends Transformer | Asyncify<Transformer>>(\n transformer: T,\n ): Promisable<ReturnType<T>>;\n}\n\ntype baseUniChunkTrans<T, ImplClass> = T extends UniChunk ? ImplClass : T;\ntype baseUniChunkTransPromise<T, ImplClass> = T extends Promise<UniChunk> ? Promise<ImplClass> : T;\ntype baseUniChunkTransX<T, ImplClass> = baseUniChunkTransPromise<\n baseUniChunkTrans<T, ImplClass>,\n ImplClass\n>;\nexport abstract class UniChunk {\n __isUniChunk = true;\n static [Symbol.hasInstance](obj: any) {\n return obj?.__isUniChunk === true;\n }\n constructor(\n public $UniDB: InitedUniDB,\n public id: number,\n ) {}\n abstract get $db(): UniDB[\"$db\"];\n static makeChunk(\n u: TransformerInput<InitedUniDB | UniChunk>,\n data: z.infer<typeof chunksZod>,\n ): Promisable<UniChunk> {\n return u instanceof InitedUniDB ? u.makeChunk(data) : u.$UniDB.makeChunk(data);\n }\n static assign(_base: UniChunk, _chunks: UniChunk[]): Promisable<UniChunk> {\n throw new Error(\"应当调用相应环境的实现\");\n }\n /**\n * 比较两个chunk的弹幕是否相同\n * @description 可用于跨DB比较\n * @deprecated 建议调用相应环境的实现\n */\n static async compare(u1: UniChunk, u2: UniChunk) {\n const dms1 = await u1.$danmakus;\n const dms2 = await 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 /**\n * 获取当前chunk的数据库记录\n * @description 虽然数组仅会包含一个值,但这里保持数据库原始返回\n */\n abstract get $chunks(): Promisable<UChunks>;\n abstract $chunk(): Promisable<UChunk>;\n abstract get $danmakus(): Promisable<UDanmakus>;\n abstract get $count(): Promisable<number>;\n abstract get isDeleted(): Promisable<boolean>;\n abstract upsertDanmakus(\n data:\n | (DanmakusInsert & { DMID?: string; platform: string | null })[]\n | Map<string, DanmakusInsert & { platform: string | null }>,\n autoSetDMID?: boolean,\n dedupeDMID?: boolean,\n ): Promisable<void>;\n abstract import(adapterStore: AdapterStore): Promisable<UniChunk>;\n abstract export<T extends Transformer | Asyncify<Transformer>>(\n transformer: T,\n ): Promise<ReturnType<T>>;\n abstract plugin<T extends Plugin | Asyncify<Plugin>>(plugin: T): Promisable<ReturnType<T>>;\n abstract delete(): Promisable<void>;\n}\n\nexport * from \"./dm-extra.ts\";\nexport * from \"./dm.ts\";\nexport * from \"./id.ts\";\nexport * from \"./platform.ts\";\nexport * from \"./uni-id.ts\";\nimport * as drizzle from \"./main-drizzle.ts\";\nimport * as pure from \"./main-pure.ts\";\nimport { createDMID, type DMIDGenerator } from \"./id.ts\";\nexport const main = { drizzle, pure };\n"],"mappings":"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"}
package/dist/core.mjs DELETED
@@ -1 +0,0 @@
1
- import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,g as l,h as u,n as d,p as f,r as p,t as m,v as h,w as g,x as _,y as v}from"./core-D9Qw3QS-.mjs";export{u as DMAttr,l as DanUniConvertTipTemplate,m as InitedUniDB,o as Modes,_ as PlatformDanmakuOnlySource,i as PlatformDanmakuOnlySources,e as PlatformDanmakuSources,g as PlatformInfoSource,a as PlatformInfoSources,n as PlatformSources,t as PlatformVideoSource,r as PlatformVideoSources,h as Pools,d as UniChunk,p as UniDB,c as UniID,f as createDMID,v as defaultUniDM,s as main};
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-f5FA8dbM.mjs","names":["migrations"],"sources":["../src/core/db/migrations.json","../src/core/db/drizzle-pglite-migrate.ts","../src/core/db/index.ts"],"sourcesContent":["","/**\n * Drizzle PGLite 基于单migrations.json的迁移组件\n * @description 配合 scripts/compile-migrations.ts 使用;ported from drizzle-orm v1.0.0-rc.2 的 pglite migrator,做了适当修改以适配;遵循drizzle原开源协议\n * @see https://github.com/drizzle-team/drizzle-orm/discussions/2532\n * @see https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.2/drizzle-orm/src/pglite/migrator.ts\n * @see https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.2/drizzle-orm/src/pg-core/dialect.ts#L73\n * @license Apache-2.0\n */\n\nimport type { MigrationMeta } from \"drizzle-orm/migrator\";\nimport { PGlite } from \"@electric-sql/pglite\";\n\ntype DbMigrationRow = {\n id: number;\n hash: string;\n created_at: string | number | bigint | null;\n};\n\nexport async function drizzlePgLiteMigrate(migrations: MigrationMeta[], db: PGlite): Promise<void> {\n const migrationsTable = \"__drizzle_migrations\";\n const migrationsSchema = \"drizzle\";\n const migrationTableCreate = `\n CREATE TABLE IF NOT EXISTS ${migrationsSchema}.${migrationsTable} (\n id SERIAL PRIMARY KEY,\n hash text NOT NULL,\n created_at bigint\n )\n `;\n\n await db.exec(`CREATE SCHEMA IF NOT EXISTS ${migrationsSchema}`);\n await db.exec(migrationTableCreate);\n\n const dbMigrations = await db.query(\n `select id, hash, created_at from ${migrationsSchema}.${migrationsTable} order by created_at desc limit 1`,\n );\n\n const lastDbMigration = dbMigrations.rows[0] as DbMigrationRow | undefined;\n const lastDbMigrationTime = lastDbMigration ? Number(lastDbMigration.created_at) : undefined;\n\n await db.transaction(async (tx) => {\n for (const migration of migrations) {\n if (lastDbMigrationTime === undefined || lastDbMigrationTime < migration.folderMillis) {\n for (const stmt of migration.sql) {\n await tx.query(stmt);\n }\n await tx.query(\n `insert into ${migrationsSchema}.${migrationsTable} (\"hash\", \"created_at\") values($1, $2)`,\n [migration.hash, migration.folderMillis],\n );\n }\n }\n });\n}\n","import { PGlite } from \"@electric-sql/pglite\";\nimport { drizzle } from \"drizzle-orm/pglite\";\nimport { baseRelations, relations } from \"./schema.ts\";\nimport { pgDump } from \"@electric-sql/pglite-tools\";\nimport migrations from \"./migrations.json\" with { type: \"json\" };\nimport { drizzlePgLiteMigrate } from \"./drizzle-pglite-migrate.ts\";\n\nexport let db:\n | (ReturnType<typeof drizzle> & { query: ReturnType<typeof drizzleQueryType> })\n | null = null;\n\nfunction drizzleQueryType() {\n return drizzle({ client: new PGlite(), relations: { ...baseRelations, ...relations } }).query;\n}\n\nexport async function migrateDb(drizzleInstance: typeof db) {\n if (drizzleInstance === null) throw new Error(\"drizzle instance is null!\");\n await drizzlePgLiteMigrate(migrations, drizzleInstance.$client);\n}\n\nexport async function initDb(dump?: File) {\n if (db) return db;\n const client = dump ? await PGlite.create(await dump.text()) : new PGlite();\n db = drizzle({ client, relations: { ...baseRelations, ...relations } });\n await migrateDb(db);\n return db;\n}\nexport async function initNewDb() {\n const db2 = drizzle({ relations: { ...baseRelations, ...relations } });\n await migrateDb(db2);\n return db2;\n}\n\nexport async function dumpDb(drizzleInstance?: typeof db) {\n if (drizzleInstance) return await pgDump({ pg: drizzleInstance.$client });\n if (!db) throw new Error(\"Database not initialized\");\n const dump = await pgDump({ pg: db.$client });\n db = null;\n return dump;\n}\n\nexport async function closeDb() {\n await db?.$client.close();\n db = null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkBA,eAAsB,EAAqB,EAA6B,EAA2B,CACjG,IAAM,EAAkB,uBAClB,EAAmB,UACnB,EAAuB;yCACU,EAAiB,GAAG,EAAgB;;;;;UAO3E,MAAM,EAAG,KAAK,+BAA+B,GAAkB,EAC/D,MAAM,EAAG,KAAK,CAAoB,EAMlC,IAAM,GAAkB,MAJG,EAAG,MAC5B,oCAAoC,EAAiB,GAAG,EAAgB,kCAC1E,GAEqC,KAAK,GACpC,EAAsB,EAAkB,OAAO,EAAgB,UAAU,EAAI,IAAA,GAEnF,MAAM,EAAG,YAAY,KAAO,IAAO,CACjC,IAAK,IAAM,KAAa,EACtB,GAAI,IAAwB,IAAA,IAAa,EAAsB,EAAU,aAAc,CACrF,IAAK,IAAM,KAAQ,EAAU,IAC3B,MAAM,EAAG,MAAM,CAAI,EAErB,MAAM,EAAG,MACP,eAAe,EAAiB,GAAG,EAAgB,wCACnD,CAAC,EAAU,KAAM,EAAU,YAAY,CACzC,CACF,CAEJ,CAAC,CACH,CC7CA,IAAW,EAEA,KAMX,eAAsB,EAAU,EAA4B,CAC1D,GAAI,IAAoB,KAAM,MAAU,MAAM,2BAA2B,EACzE,MAAM,EAAqBA,EAAY,EAAgB,OAAO,CAChE,CAEA,eAAsB,EAAO,EAAa,CAKxC,OAJI,IAEJ,EAAK,EAAQ,CAAE,OADA,EAAO,MAAM,EAAO,OAAO,MAAM,EAAK,KAAK,CAAC,EAAI,IAAI,EAC5C,UAAW,CAAE,GAAG,EAAe,GAAG,CAAU,CAAE,CAAC,EACtE,MAAM,EAAU,CAAE,EACX,EACT,CACA,eAAsB,GAAY,CAChC,IAAM,EAAM,EAAQ,CAAE,UAAW,CAAE,GAAG,EAAe,GAAG,CAAU,CAAE,CAAC,EAErE,OADA,MAAM,EAAU,CAAG,EACZ,CACT,CAEA,eAAsB,EAAO,EAA6B,CACxD,GAAI,EAAiB,OAAO,MAAM,EAAO,CAAE,GAAI,EAAgB,OAAQ,CAAC,EACxE,GAAI,CAAC,EAAI,MAAU,MAAM,0BAA0B,EACnD,IAAM,EAAO,MAAM,EAAO,CAAE,GAAI,EAAG,OAAQ,CAAC,EAE5C,MADA,GAAK,KACE,CACT,CAEA,eAAsB,GAAU,CAC9B,MAAM,GAAI,QAAQ,MAAM,EACxB,EAAK,IACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dm-extra-6EjI8V-C.d.mts","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,cAAc;AAAA;AAAA,UAEL,gBAAA;EACf,QAAA;EACA,KAAA;EACA,OAAA;EACA,WAAA;EACA,aAAA;AAAA;AAAA,UAEe,cAAA;EACf,OAAO;AAAA;AAAA,UAEQ,WAAA;EACf,GAAA;EACA,GAAG;AAAA;AAAA,UAGY,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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CIOKEu88.d.mts","names":["T","T","IsNull","T","PromiseLike","Function_","arguments_","TypeToReturn","ThisArgument","this","Arguments","IsUnknown","Parameters","Function_","arguments_","SetReturnType","Promise","Awaited","ReturnType"],"sources":["../node_modules/type-fest/source/is-null.d.ts","../node_modules/type-fest/source/is-unknown.d.ts","../node_modules/type-fest/source/promisable.d.ts","../node_modules/type-fest/source/set-return-type.d.ts","../node_modules/type-fest/source/asyncify.d.ts","../src/core/platform.ts","../src/core/dm.ts","../src/core/id.ts","../src/core/uni-id.ts","../src/core/main-drizzle.ts","../src/utils/serialMap.ts","../src/core/main-pure.ts","../src/core/index.ts","../src/adapters/danuni/json.ts","../src/adapters/danuni/pb.ts","../src/adapters/bili/command-grpc.ts","../src/adapters/bili/grpc.ts","../src/adapters/bili/up.ts","../src/adapters/bili/xml.ts","../src/adapters/artplayer.ts","../src/adapters/ddplay.ts","../src/adapters/dplayer.ts","../src/adapters/tencent.ts","../src/adapters/vod.ts","../src/adapters/index.ts"],"x_google_ignoreList":[0,1,2,3,4],"mappings":";;;;;;;;;;;;;AAmBA;;;;AAA0B;;;;ACe1B;;;;KDfY,MAAA,OAAa,CAAC;;;;;;;;AAA1B;;;;AAA0B;;;;ACe1B;;;;;;;;;;;;;AAEY;;;;ACZZ;;KDUY,SAAA,uBACK,CAAA;AAAA,EACb,MAAA,CAAO,CAAA;AAAA;;;;;;;;;;ADjBX;;;;AAA0B;;;;ACe1B;;;;;;;;;KCVY,UAAA,MAAgB,CAAA,GAAI,WAAA,CAAY,CAAA;;;;;;;;AFL5C;;;;AAA0B;;;;ACe1B;;;;KEfY,aAAA,uBAAoCM,UAAAA;AAE/C,SAAA,WAAmBG,IAAAA,yBAA6BH,UAAAA;AAAAA;AAG/C,SAAA,CAAU,YAAA,qBAAiCA,UAAAA,EAAY,SAAA,KAAc,YAAA,IAAgBG,IAAAA,EAAM,YAAA,KAAiBH,UAAAA,EAAY,SAAA,KAAc,YAAA;AAAA,IAGlIA,UAAAA,EAAY,UAAA,CAAW,SAAA,MAAe,YAAA;;;;;;;;AHR5C;;;;AAA0B;;;;ACe1B;;;;;;;KGZY,QAAA,uBAA+BQ,UAAAA,mBAA6B,aAAA,CAAc,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,SAAA;;;aCtBhH,kBAAA;EACV,OAAA;EACA,IAAI;AAAA;AAAA,cAEO,mBAAA,EAAmB,kBAAA;AAAA,aAEpB,mBAAA;EACV,KAAA;EACA,IAAA;EACA,QAAA;EACA,cAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA;AAAA;AAAA,cAEW,oBAAA,EAAoB,mBAAA;AAAA,aAErB,yBAAA;EACV,UAAA;EACA,KAAK;AAAA;AAAA,cAEM,0BAAA,EAA0B,yBAAA;AAAA,KAE3B,qBAAA,GAAwB,mBAAA,GAAsB,yBAAyB;AAAA,cACtE,sBAAA,GAAsB,mBAAA,GAAA,yBAAA;AAAA,KAEvB,cAAA,GAAiB,kBAAA,GAAqB,qBAAqB;AAAA,cAC1D,eAAA,GAAe,kBAAA,GAAA,mBAAA,GAAA,yBAAA;;;aCrBhB,KAAA;EACV,MAAA;EACA,MAAA;EACA,GAAA;EACA,OAAA;EAAA;EACA,GAAA;AAAA;AAAA,aAEU,KAAA;EACV,GAAA;EAAA;EACA,GAAA;EAAA;EACA,GAAA;EAAA;EACA,EAAA;AAAA;AAAA,aAEU,MAAA;EACV,OAAA;EACA,QAAA;EACA,QAAA;EACA,UAAA;EAAA;EACA,QAAA;EAAA;EACA,SAAA;EAAA;EACA,QAAA;EAAA;EACA,IAAA;AAAA;AAAA,UAGe,QAAA;EACf,IAAA;EACA,QAAA;EACA,IAAA,EAAM,KAAA;EACN,QAAA;EACA,KAAA;EACA,QAAA;EACA,OAAA;EACA,KAAA,EAAO,IAAA;EACP,MAAA;EACA,IAAA,EAAM,KAAA;EACN,IAAA,EAAM,MAAA;EACN,QAAA,EAAU,qBAAA;EACV,KAAA,EAAO,KAAA;EAEP,IAAA;AAAA;AAAA,cAGW,YAAA;EAAA,SACX,IAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA,EAAI,KAAA,CAAA,MAAA;EAAA,SACJ,QAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA;EAAA,SACA,OAAA;EAAA,SAEA,MAAA;EAAA,SACA,IAAA,EAAI,KAAA,CAAA,GAAA;EAAA,SACJ,IAAA,EAAY,MAAA;EAAA,SACZ,QAAA;EAAA,SACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,QAAA;EACA,OAAA;EACA,IAAA;AAAA;AAAA,cAGW,wBAAA,EAA0B,gBAGtC;;;KCpEI,oBAAA,GAAuB,IAAI,CAAC,QAAA;AAAA,KACrB,aAAA,IAAiB,GAAA,EAAK,oBAAoB,EAAE,KAAA;AAAA,cAE3C,UAAA,EAAY,aAoBxB;;;cCzBK,cAAA,EAAc,CAAA,CAAA,kBAAA;AAAA,KACf,QAAA,GAAW,CAAA,CAAE,KAAK,QAAQ,cAAA;AAAA,cAElB,KAAA;;;ARab;;;EQNW,EAAA;ERMe;;;;ACe1B;;;;EOZW,MAAA,EAAQ,cAAA;EAfjB,WAAA;EP6BQ;;;;;;EOvBC,EAAA;EPuBC;AAAA;;;;ACZZ;;;;EMFW,MAAA,EAAQ,cAAA;EAAA,OAEV,cAAA,CAAe,GAAA;EAAA,OAGf,cAAA,CAAe,GAAA,WAAW,KAAA;EAAA,OAG1B,UAAA,CAAW,GAAA,EAAK,QAAA,GAAQ,KAAA;EAI/B,QAAA,IAAY,QAAA;EAAA,OAGL,QAAA,CAAS,MAAA,GAAS,cAAA,YAAuB,KAAA;EAAA,OAGzC,QAAA;IACL,GAAA;IACA,GAAA;IACA;EAAA;IAEA,GAAA;IACA,GAAA;IACA,OAAA;EAAA,IACD,KAAA;EAAA,OAMM,WAAA,CACL,EAAA;;;ALpCJ;;EKwCI,MAAA,EAAQ,cAAA,YAAuB,KAAA;AAAA;AAAA;;;KC1C9B,gBAAA,MAAoB,cAAA,CAAoB,CAAA,EAAG,OAAA,EAAO,aAAA,EAAa,UAAA;AAAA,cAEvD,OAAA,YAAiB,KAAA;EAGnB,GAAA,gCAAG,cAAA,uBAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EACH,aAAA,EAAe,aAAA;EAHxB,SAAA;EACA,WAAA,CACS,GAAA,iCAAG,cAAA,uBAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aACH,aAAA,GAAe,aAAA;EAElB,IAAA,CAAK,IAAA,GAAO,IAAA,GAAI,OAAA,CAAA,aAAA;EAGhB,KAAA,IAAK,OAAA;AAAA;AAAA,cA4BA,aAAA,SAAoB,OAAA,YAAiB,WAAA;EAGvC,GAAA,EAAK,WAAA,CAAY,OAAA;EACjB,aAAA,EAAe,aAAA;EAHxB,eAAA;EACA,WAAA,CACS,GAAA,EAAK,WAAA,CAAY,OAAA,UACjB,aAAA,GAAe,aAAA;EAIlB,IAAA,IAAI,OAAA,CAAA,IAAA;EAAA,IAIN,OAAA,IAAO,OAAA;;;;;MAGP,SAAA,IAAS,OAAA;;;;;;;;;;;;;;;;EAWP,UAAA,IAAU,OAAA,CAAA,UAAA;EAIV,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,CAAA,CAAE,KAAA,QAAa,SAAA,WAAiB,OAAA,CAAA,UAAA;EAIrD,cAAA,CAAe,IAAA,EAAM,cAAA,KAAmB,GAAA,SAAY,cAAA,GAAiB,UAAA,aAAiB,OAAA;;;;EAatF,MAAA,IAAM,OAAA;EAQZ,MAAA,CAAO,YAAA,EAAc,YAAA,GAAoB,UAAA,CAAW,UAAA;EAG9C,MAAA,WAAiB,WAAA,EAAa,WAAA,EAAa,CAAA,GAAC,OAAA,CAAA,UAAA,CAAA,CAAA;AAAA;AAAA,cAKvC,UAAA,YAAoB,QAAA;EAGtB,MAAA,EAAQ,aAAA;EACR,EAAA;EAHT,YAAA;EACA,WAAA,CACS,MAAA,EAAQ,aAAA,EACR,EAAA;EAAA,IAEL,GAAA,iCAAG,cAAA,uBAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAGM,SAAA,CACX,CAAA,EAAG,gBAAA,CAAiB,aAAA,GAAc,UAAA,GAClC,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,SAAA,IAAU,OAAA,CAAA,UAAA;;;;;;;;;SAYpB,MAAA,CAAO,IAAA,EAAM,UAAA,EAAU,MAAA,EAAQ,UAAA,KAAU,OAAA,CAAA,UAAA;;;;;SAuBzC,OAAA,CAAQ,EAAA,EAAI,UAAA,EAAU,EAAA,EAAI,UAAA,GAAQ,OAAA;;;;;MAmB3C,OAAA,IAAO,IAAA,+BAAA,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGL,MAAA,IAAM,OAAA;;;;;MAIR,SAAA,IAAS,OAAA;;;;;;;;;;;;;;;;MAYT,MAAA,kCAAM,mBAAA;EAAA,IAGN,SAAA,IAAS,OAAA;EAGP,cAAA,CACJ,IAAA,EAAM,GAAA,SAAY,cAAA;IAAmB,QAAA;EAAA,IACrC,WAAA,UACA,UAAA,WACC,OAAA;EACG,cAAA,CACJ,IAAA,EAAM,QAAA,CAAS,cAAA;IAAmB,IAAA;IAAc,QAAA;EAAA,MAChD,WAAA,UACA,UAAA,aACC,OAAA;EACG,cAAA,CACJ,IAAA,EAAM,QAAA,CAAS,cAAA;IAAmB,IAAA;EAAA,MAClC,WAAA,QACA,UAAA,UACC,OAAA;EA+BH,MAAA,CAAO,YAAA,EAAc,YAAA,GAAoB,UAAA,CAAW,UAAA;EAG9C,MAAA,WAAiB,WAAA,EAAa,WAAA,EAAa,CAAA,GAAC,OAAA,CAAA,UAAA,CAAA,CAAA;EAOlD,MAAA,WAAiB,MAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,gBAAA,CAAe,UAAA,CAAW,CAAA;EACzD,MAAA,WAAiB,QAAA,CAAS,MAAA,GAAS,MAAA,EAAQ,CAAA,GAAI,OAAA,CAAQ,gBAAA,CAAe,UAAA,CAAW,CAAA;EAOjF,MAAA,IAAM,OAAA;AAAA;;;KChRT,cAAA,MAAoB,GAAG,SAAS,CAAA;AAAA,cACxB,SAAA,eAAwB,GAAA,SAAY,CAAA;EAAA;MAI3C,UAAA;EAIJ,GAAA,CAAI,KAAA,EAAO,CAAA;EAIX,MAAA,CAAO,MAAA;EAKP,KAAA;EAKA,MAAA;IAEI,SAAA;IACA,MAAA,WAAM,CAAA;IACN,cAAA;IACA,aAAA;EAAA;EAAA,OAGG,QAAA,IAAY,IAAA,EAAM,UAAA,CAAW,SAAA,CAAU,CAAA,eAAgB,SAAA,CAAU,CAAA;EAAA,IAQpE,IAAA;EAGJ,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA;EAGvC,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,YAAU,CAAA;EAGjD,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA;EAIvC,WAAA,IAAe,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,oBAAkB,CAAA;EAGjE,mBAAA,IAAuB,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,4BAA0B,CAAA;EAGjF,OAAA,IAAW,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA;EAG3C,IAAA,IAAQ,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,aAAW,WAAA;EAGnD,MAAA,IAAU,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,eAAa,WAAA,CAAA,CAAA;EAGvD,OAAA,IAAW,IAAA,EAAM,UAAA,CAAW,cAAA,CAAe,CAAA,gBAAc,WAAA,UAAA,CAAA;EAAA,CAGxD,MAAA,CAAO,QAAA,KAAS,WAAA,UAAA,CAAA;EAAA,KAGZ,MAAA,CAAO,WAAA;AAAA;AAAA,KAKT,iBAAA,MAAuB,GAAG,SAAS,CAAA;AAAA,cAC3B,YAAA,eAA2B,GAAA,SAAY,CAAA;EAAA;MAI9C,UAAA;EAIJ,GAAA,CAAI,KAAA,EAAO,CAAA;EAIX,MAAA,CAAO,MAAA;EAKP,KAAA;EAKA,MAAA;IAEI,SAAA;IACA,MAAA,WAAM,CAAA;IAIN,cAAA;IACA,aAAA;EAAA;EAAA,OAGG,QAAA,IAAY,IAAA,EAAM,UAAA,CAAW,YAAA,CAAa,CAAA,eAAgB,YAAA,CAAa,CAAA;EAAA,IAQ1E,IAAA;EAGJ,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA;EAG1C,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,YAAU,CAAA;EAGpD,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA;EAI1C,WAAA,IAAe,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,oBAAkB,CAAA;EAGpE,mBAAA,IAAuB,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,4BAA0B,CAAA;EAGpF,OAAA,IAAW,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA;EAG9C,IAAA,IAAQ,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,aAAW,WAAA;EAGtD,MAAA,IAAU,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,eAAa,WAAA,CAAA,CAAA;EAG1D,OAAA,IAAW,IAAA,EAAM,UAAA,CAAW,iBAAA,CAAkB,CAAA,gBAAc,WAAA,UAAA,CAAA;EAAA,CAG3D,MAAA,CAAO,QAAA,KAAS,WAAA,UAAA,CAAA;EAAA,KAGZ,MAAA,CAAO,WAAA;AAAA;AAAA;;;KClJT,gBAAA,MAAoB,cAAA,CAAoB,CAAA,EAAG,OAAA,EAAO,aAAA,EAAa,UAAA;AAAA,UAE1D,KAAA;EACR,QAAA,EAAU,QAAA;EACV,MAAA,EAAQ,UAAA,CAAW,SAAA,CAAU,MAAA;EAC7B,cAAA,EAAgB,UAAA,CAAW,YAAA,CAAa,cAAA;AAAA;AAAA,UAGhC,KAAA;EACR,QAAA,EAAU,GAAA,SAAY,QAAA;EACtB,MAAA,EAAQ,SAAA,CAAU,MAAA;EAClB,cAAA,EAAgB,YAAA,CAAa,cAAA;AAAA;AAAA,iBAQf,SAAA;YAVJ,GAAA,SAAY,QAAA;UACd,SAAA,CAAU,MAAA;kBACF,YAAA,CAAa,cAAA;AAAA;AAAA,cAYlB,OAAA,YAAiB,KAAA;EAGnB,GAAA,EAAK,KAAA;EACL,aAAA,EAAe,aAAA;EAHxB,SAAA;EACA,WAAA,CACS,GAAA,GAAK,KAAA,EACL,aAAA,GAAe,aAAA;EAExB,IAAA,CAAK,KAAA,GAAQ,KAAA,GAAK,aAAA;EAUlB,KAAA;AAAA;AAAA,cAyBW,aAAA,SAAoB,OAAA,YAAiB,WAAA;EAGvC,GAAA,EAAK,KAAA;EACL,aAAA,EAAe,aAAA;EAHxB,eAAA;EACA,WAAA,CACS,GAAA,EAAK,KAAA,EACL,aAAA,GAAe,aAAA;EAIxB,IAAA,IAAQ,KAAA;EAAA,IAOJ,OAAA;;;;;MAGA,SAAA;;;;;;;;;;;;;;;;EAGJ,UAAA,IAAU,UAAA;EAIV,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,CAAA,CAAE,KAAA,QAAa,SAAA,WAAiB,UAAA;EASrD,cAAA,CAAe,IAAA,EAAM,cAAA,KAAmB,GAAA,SAAY,cAAA,GAAiB,UAAA;ER/ErD;;;EQ4FhB,MAAA;EAIA,MAAA,CAAO,YAAA,EAAc,YAAA,GAAoB,UAAA,CAAW,UAAA;EAGpD,MAAA,WAAiB,WAAA,EAAa,WAAA,EAAa,CAAA,GAAI,UAAA,CAAW,CAAA;EACpD,MAAA,WAAiB,QAAA,CAAS,WAAA,GAAc,WAAA,EAAa,CAAA,GAAI,OAAA,CAAQ,UAAA,CAAW,CAAA;AAAA;AAAA,cAMvE,UAAA,YAAoB,QAAA;EAGtB,MAAA,EAAQ,aAAA;EACR,EAAA;EAHT,YAAA;EACA,WAAA,CACS,MAAA,EAAQ,aAAA,EACR,EAAA;EAAA,IAEL,GAAA,IAAG,KAAA;EAAA,OAGA,SAAA,CACL,CAAA,EAAG,gBAAA,CAAiB,aAAA,GAAc,UAAA,GAClC,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,SAAA,IACpB,UAAA;ERzHoDJ;;;;;;;;EAAAA,OQoIhD,MAAA,CAAO,IAAA,EAAM,UAAA,EAAU,MAAA,EAAQ,UAAA,KAAU,UAAA;ERjIrBL;;;AAA2B;EAA3BA,OQmJpB,OAAA,CAAQ,EAAA,EAAI,UAAA,EAAU,EAAA,EAAI,UAAA;EAAA,IAe7B,OAAA;;;;;EAIJ,MAAA;;;;;MAII,SAAA;;;;;;;;;;;;;;;;MAOA,MAAA;EAAA,IAIA,SAAA;EAGJ,cAAA,CACE,IAAA,EAAM,GAAA,SAAY,cAAA;IAAmB,QAAA;EAAA,IACrC,WAAA,UACA,UAAA;EAEF,cAAA,CACE,IAAA,EAAM,QAAA,CAAS,cAAA;IAAmB,IAAA;IAAc,QAAA;EAAA,MAChD,WAAA,UACA,UAAA;EAEF,cAAA,CACE,IAAA,EAAM,QAAA,CAAS,cAAA;IAAmB,IAAA;EAAA,MAClC,WAAA,QACA,UAAA;EAmCF,MAAA,CAAO,YAAA,EAAc,YAAA,GAAoB,UAAA,CAAW,UAAA;EAGpD,MAAA,WAAiB,WAAA,EAAa,WAAA,EAAa,CAAA,GAAI,UAAA,CAAW,CAAA;EACpD,MAAA,WAAiB,QAAA,CAAS,WAAA,GAAc,WAAA,EAAa,CAAA,GAAI,OAAA,CAAQ,UAAA,CAAW,CAAA;EAQlF,MAAA,WAAiB,MAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,gBAAA,CAAe,UAAA,CAAW,CAAA;EAC/D,MAAA,WAAiB,QAAA,CAAS,MAAA,GAAS,MAAA,EAAQ,CAAA,GAAI,OAAA,CAAQ,gBAAA,CAAe,UAAA,CAAW,CAAA;EAOjF,MAAA;AAAA;AAAA;;;KCjRU,YAAA,IAAgB,GAAA,EAAK,WAAA,EAAa,MAAA,GAAS,QAAA,KAAa,UAAA,CAAW,QAAA;AAAA,cAEzE,EAAA,EAAmB,WAAW,QAAQ,IAAA;AAAA,KACvC,OAAA,GAAU,OAAA,CAAQ,UAAA,QAAkB,EAAA,CAAG,KAAA,CAAM,MAAA,CAAO,QAAA;AAAA,KAC7C,MAAA,GAAS,OAAO;AAAA,KACvB,SAAA,GAAY,OAAA,CAAQ,UAAA,QAAkB,EAAA,CAAG,KAAA,CAAM,QAAA,CAAS,QAAA;AAAA,KACjD,QAAA,GAAW,SAAS;AAAA,KAC3B,eAAA,GAAkB,OAAA,CAAQ,UAAA,QAAkB,EAAA,CAAG,KAAA,CAAM,cAAA,CAAe,QAAA;AAAA,KAC7D,cAAA,GAAiB,eAAe;AAAA,KAEhC,cAAA,gDAA8D,kBAAA,CACxE,qBAAA,CAAsB,eAAA,CAAgB,CAAA,EAAG,SAAA,GAAY,eAAA,GACrD,YAAA;AAAA,KAGG,cAAA,iBAA+B,CAAA,SAAU,KAAA,GAAQ,SAAA,GAAY,CAAA;AAAA,KAC7D,qBAAA,iBAAsC,CAAA,SAAU,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,SAAA,IAAa,CAAA;AAAA,KACtF,eAAA,iBAAgC,qBAAA,CAAsB,cAAA,CAAe,CAAA,EAAG,SAAA,GAAY,SAAA;AAAA,uBACnE,KAAA;EAMX,GAAA;EACA,aAAA,EAAe,aAAA;EANxB,SAAA;EAAA,QACQ,MAAA,CAAO,WAAA,EAAa,GAAA;EAG5B,WAAA,CACS,GAAA,OACA,aAAA,GAAe,aAAA;EAAA,SAEf,IAAA,CAAK,IAAA,aAAiB,UAAA,CAAW,WAAA;EAAA,SACjC,KAAA,IAAS,UAAA;AAAA;AAAA,KAGf,oBAAA,iBAAqC,CAAA,SAAU,WAAA,GAAc,SAAA,GAAY,CAAA;AAAA,KACzE,2BAAA,iBACH,CAAA,SAAU,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,SAAA,IAAa,CAAA;AAAA,KACnD,qBAAA,iBAAsC,2BAAA,CACzC,oBAAA,CAAqB,CAAA,EAAG,SAAA,GACxB,SAAA;AAAA,uBAEoB,WAAA,SAAoB,KAAA;EAM/B,GAAA,EAAK,WAAA,CAAY,KAAA;EACjB,aAAA,EAAe,aAAA;EANxB,eAAA;EAAA,QACQ,MAAA,CAAO,WAAA,EAAa,GAAA;EAG5B,WAAA,CACS,GAAA,EAAK,WAAA,CAAY,KAAA,UACjB,aAAA,GAAe,aAAA;EAAA,SAIf,IAAA,IAAQ,UAAA;EAAA,aACJ,OAAA,IAAW,UAAA,CAAW,OAAA;EAAA,aACtB,SAAA,IAAa,UAAA,CAAW,SAAA;EAAA,SAC5B,UAAA,IAAc,UAAA,CAAW,QAAA;EAAA,SACzB,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,CAAA,CAAE,KAAA,QAAa,SAAA,WAAoB,UAAA,CAAW,QAAA;EAAA,SACnE,cAAA,CACP,IAAA,EAAM,cAAA,KAAmB,GAAA,SAAY,cAAA,GACrC,UAAA,YACC,UAAA;EVvCuBF;;;EAAAA,SU2CjB,MAAA,IAAU,UAAA;EAAA,SACV,MAAA,CAAO,YAAA,EAAc,YAAA,GAAe,UAAA,CAAW,QAAA;EAAA,SAC/C,MAAA,WAAiB,WAAA,GAAc,QAAA,CAAS,WAAA,GAC/C,WAAA,EAAa,CAAA,GACZ,UAAA,CAAW,UAAA,CAAW,CAAA;AAAA;AAAA,KAGtB,iBAAA,iBAAkC,CAAA,SAAU,QAAA,GAAW,SAAA,GAAY,CAAA;AAAA,KACnE,wBAAA,iBAAyC,CAAA,SAAU,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,SAAA,IAAa,CAAA;AAAA,KAC5F,kBAAA,iBAAmC,wBAAA,CACtC,iBAAA,CAAkB,CAAA,EAAG,SAAA,GACrB,SAAA;AAAA,uBAEoB,QAAA;EAMX,MAAA,EAAQ,WAAA;EACR,EAAA;EANT,YAAA;EAAA,QACQ,MAAA,CAAO,WAAA,EAAa,GAAA;EAG5B,WAAA,CACS,MAAA,EAAQ,WAAA,EACR,EAAA;EAAA,aAEI,GAAA,IAAO,KAAA;EAAA,OACb,SAAA,CACL,CAAA,EAAG,gBAAA,CAAiB,WAAA,GAAc,QAAA,GAClC,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,SAAA,IACpB,UAAA,CAAW,QAAA;EAAA,OAGP,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,QAAA,KAAa,UAAA,CAAW,QAAA;ETrErC;;;;;EAAA,OS6Ed,OAAA,CAAQ,EAAA,EAAI,QAAA,EAAU,EAAA,EAAI,QAAA,GAAQ,OAAA;ETrFDG;;;;EAAAA,aSwGjC,OAAA,IAAW,UAAA,CAAW,OAAA;EAAA,SAC1B,MAAA,IAAU,UAAA,CAAW,MAAA;EAAA,aACjB,SAAA,IAAa,UAAA,CAAW,SAAA;EAAA,aACxB,MAAA,IAAU,UAAA;EAAA,aACV,SAAA,IAAa,UAAA;EAAA,SACjB,cAAA,CACP,IAAA,GACK,cAAA;IAAmB,IAAA;IAAe,QAAA;EAAA,OACnC,GAAA,SAAY,cAAA;IAAmB,QAAA;EAAA,IACnC,WAAA,YACA,UAAA,aACC,UAAA;EAAA,SACM,MAAA,CAAO,YAAA,EAAc,YAAA,GAAe,UAAA,CAAW,QAAA;EAAA,SAC/C,MAAA,WAAiB,WAAA,GAAc,QAAA,CAAS,WAAA,GAC/C,WAAA,EAAa,CAAA,GACZ,OAAA,CAAQ,UAAA,CAAW,CAAA;EAAA,SACb,MAAA,WAAiB,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,MAAA,EAAQ,CAAA,GAAI,UAAA,CAAW,UAAA,CAAW,CAAA;EAAA,SAC9E,MAAA,IAAU,UAAA;AAAA;AAAA,cAWR,IAAA;kBAAwB,sBAAA;eAAA,mBAAA;AAAA;;;cC9IxB,aAAA,EAAa,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,QAAA,KAAA,IAAA,CAAA,CAAA,OAAA;;;;;;;cAQb,aAAA,EAAa,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,QAAA,KAAA,IAAA,CAAA,CAAA,OAAA;;;;;;cAQb,cAAA,EAAc,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA,QAAA,MAAA,IAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA;;;;;;;;;;cAiBd,iBAAA,GAAiB,IAAA,EACrB,OAAA,CAAQ,QAAA;EAAa,QAAA;AAAA,MAAsB,OAAA;EAAc,IAAA;AAAA,OAAgB,GAAA,EAAlE,WAAA,EAAkE,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,UAqCxE,4BAAA;EXxDE;;;EW4DV,MAAM;AAAA;AAAA,iBAGQ,iCAAA,CACd,OAAA,EAAS,4BAAA;EAAiC,MAAA;AAAA,IACzC,WAAA,CAAY,OAAA,CAAQ,QAAA;AAAA,iBACP,iCAAA,CACd,OAAA,GAAU,4BAAA,GACT,WAAA,CAAY,QAAA;AAAA,cAgCF,kBAAA,EAaX,QAAA;;;cCzGW,eAAA,GAAe,GAAA,EACpB,UAAA,GAAa,WAAA,MAAW,GAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAmCnB,mBAAA,GAAmB,SAAA;;;;;;;;;;;;;;;;cAqBnB,gBAAA,EAuBX,QAAA;;;cCxGW,sBAAA,GAAsB,GAAA,EAAuB,UAAA,GAAa,WAAA,MAAW,GAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAyCrE,uBAAA,EAuBX,QAAA;;;UCzDQ,MAAA;EACR,EAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,GAAA;EACA,OAAA;EfYU;;;;;;EeLV,OAAA;EACA,KAAA;EACA,IAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACA,KAAA;EACA,QAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,iBAiCc,gBAAA,CAAiB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,GAAA,WAAc,OAAA;;;;;;;EdjDlDH;;;;AAAiB;;;;;;;;;;;;;;;;;;;;Uc6HnC,wBAAA;EACR,eAAA;EbnIyEI;;;EauIzE,mBAAmB;AAAA;AAAA,cAER,iBAAA,GAAiB,IAAA,EAAU,CAAA,CAAE,KAAA,QAAa,aAAA,CAAc,GAAA,GAAI,KAAA,GAAU,SAAA;AAAA,iBAoBnE,iBAAA,CACd,aAAA,EAAe,aAAA,EACf,IAAA,EAAM,QAAA,EACN,OAAA,GAAU,wBAAA;;;;cAqCC,eAAA,GAAe,GAAA,EAAuB,UAAA,GAAa,WAAA,MAAW,GAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAU9D,gBAAA,EAuBX,QAAA;;;UCnPQ,cAAA;;EAER,IAAA;;EAEA,OAAA;;EAEA,GAAA;EACA,IAAA;IjBMgB,YiBJd,IAAA;MjBIsB,mBiBFpB,GAAA;MAEA,IAAA;MAEA,KAAA;IAAA;IAEF,MAAA;MhBYa,kBgBVX,EAAA,UhBWF;MgBTE,MAAA,UhBSI;MgBPJ,IAAA;MACA,GAAA;MACA,IAAA;MACA,GAAA;MACA,GAAA,UhBGM;MgBDN,QAAA;MAEA,IAAA,UfbM;MeeN,KAAA,UffgB;MeiBhB,QAAA;MACA,IAAA,UflB0B;MeoB1B,GAAA;MACA,KAAA;MACA,QAAA,UftBsBJ;MewBtB,KAAA,UfxBsCA;Me0BtC,KAAA,Uf1BuC;Me4BvC,KAAA;MAEA,KAAA,UdnCM;McqCN,KAAA;MACA,SAAA,WdpCL;McsCK,UAAA;MACA,SAAA,UdpCmD;McsCnD,OAAA,UdtCuF;McwCvF,KAAA;MACA,SAAA;MACA,cAAA;MACA,SAAA;MACA,SAAA;IAAA;EAAA;AAAA;AAAA,cAKO,aAAA,GAAa,IAAA,EAAwB,cAAA,MAAc,GAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAmCnD,cAAA,EAaX,QAAA;;;cCpEW,cAAA,GAAc,GAAA,cAA6B,GAAA,EAatD,WAAA,EAbsD,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,UAe9C,yBAAA;;;;EAIR,GAAA;;AlBrDF;;EkByDE,eAAA;ElBzDiBH;AAAO;;;;EkB+DxB,mBAAA;AAAA;AAAA,cAcW,8BAAA,GAA8B,OAAA,GAAc,yBAAA,MAAyB,SAAA;;;;;;;;;;;;;;;;;;;cA4BrE,eAAA,EAaX,QAAA;;;UClIQ,iBAAA;EACR,OAAA;IACE,IAAA;IACA,IAAA;IACA,IAAA;IACA,KAAA;IACA,MAAA;IACA,KAAA;EAAA;AAAA;AAAA,cAIS,gBAAA,GAAgB,IAAA,EAEnB,iBAAA;EAAsB,MAAA,GAAS,gBAAA;AAAA,GAAkB,QAAA,WACtC,MAAA,eACH,GAAA,EAFuC,WAAA,EAEvC,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAkDL,oBAAA,GAAoB,SAAA;;;;;;;;;;;;;;;QAClB,iBAAA;EAAsB,MAAA,GAAS,gBAAA;AAAA;AAAA,cAqBjC,iBAAA,EAcX,QAAA;;;UCrGQ,cAAA;EACR,KAAA;EACA,QAAA;IACE,GAAA;IACA,CAAA;IACA,CAAA;EAAA;AAAA;AAAA,cAIS,aAAA,GAAa,IAAA,EAEhB,cAAA;EAAmB,MAAA,GAAS,gBAAA;AAAA,GAAkB,SAAA,WACnC,MAAA,eACH,GAAA,EAFoC,WAAA,EAEpC,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAyCL,iBAAA,GAAiB,SAAA;;;;;;;;;;;;;;;QACf,cAAA;EAAmB,MAAA,GAAS,gBAAA;AAAA;AAAA,cAyB9B,cAAA,EAcX,QAAA;;;UC/FQ,eAAA;EACR,IAAA;;;;EAIA,IAAI;AAAA;AAAA,cAGO,cAAA,GAAc,IAAA,EAEjB,eAAA;EAAoB,MAAA,GAAS,gBAAA;AAAA,GAAkB,QAAA,WACpC,MAAA,eACH,GAAA,EAFqC,WAAA,EAErC,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAsCL,kBAAA,GAAkB,SAAA;;;;;;;;;;;;;;;QAChB,eAAA;EAAoB,MAAA,GAAS,gBAAA;AAAA;AAAA,cAe/B,eAAA,EAcX,QAAA;;;UC9EQ,cAAA;EACR,EAAA;EACA,KAAA;EACA,QAAA;EACA,WAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,SAAA;EACA,aAAA;EACA,eAAA;EACA,WAAA;EACA,OAAA;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;AAAA,UAGQ,eAAA;EACR,YAAA,EAAc,cAAc;AAAA;AAAA,cAmCjB,cAAA,GAAc,IAAA,EAAwB,eAAA,EAAe,GAAA,eAAc,GAAA,EAAd,WAAA,EAAc,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cA+CnE,eAAA,EAcX,QAAA;;;UC/HQ,WAAA;EACR,IAAA;EACA,IAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,cAGW,MAAA,EAAM,CAAA,CAAA,SAAA;;;;;;cAoCN,UAAA,GAAU,IAAA,EACd,WAAA,EAAW,OAAA,WAAkB,MAAA,eAAgB,GAAA,EAAlC,WAAA,EAAkC,MAAA,EAAA,QAAA,iBAAA,OAAA,CAAA,QAAA;AAAA,cAgCzC,cAAA,GAAc,SAAA;;;;;;;;;;;;;;;QACZ,WAAA;EAAgB,MAAA,GAAS,gBAAA;AAAA;AAAA,cAgC3B,WAAA,EAiBX,QAAA;AAAA;;;KC1HU,gBAAA,KAAqB,WAAA,GAAc,QAAA,IAAY,CAAA;AAAA,KAE/C,OAAA,mCAA0C,IAAA,EAAM,IAAA,KAAS,UAAA,CAAW,YAAA;AAAA,KACpE,WAAA,iBACV,SAAA,EAAW,QAAA,IACX,GAAA;EACE,MAAA,GAAS,MAAA;EACT,aAAA,EAAe,aAAA;AAAA,MAEd,CAAA;AAAA,KACO,MAAA,iBAAuB,MAAA,EAAQ,QAAA,KAAa,UAAA,CAAW,CAAA;AAAA,KACvD,QAAA;EACV,IAAA;EACA,GAAA;EACA,KAAA;IACE,EAAA,IAAM,EAAA;IACN,IAAA,IAAQ,IAAA,cAAkB,UAAA,QAAkB,OAAA;IAC5C,OAAA,IAAW,MAAA,EAAQ,QAAA,EAAU,IAAA,cAAkB,UAAA,QAAkB,OAAA,GAAU,QAAA;EAAA;AAAA;AAAA,iBAI/D,aAAA,WAAwB,OAAA,EAAS,OAAA,EAAS,CAAA,GAAC,CAAA;AAAA,iBAG3C,iBAAA,WAA4B,WAAA,EAAa,WAAA,EAAa,CAAA,GAAC,CAAA;AAAA,iBAGvD,YAAA,WAAuB,MAAA,EAAQ,MAAA,EAAQ,CAAA,GAAC,CAAA;AAAA,iBAGxC,cAAA,CAAe,QAAA,EAAU,QAAA,GAAQ,QAAA"}
package/dist/index.d.mts DELETED
@@ -1,4 +0,0 @@
1
- import { tt as index_d_exports$1, u as index_d_exports } from "./index-CIOKEu88.mjs";
2
- import { t as index_d_exports$2 } from "./plugins.mjs";
3
- import { t as index_d_exports$3 } from "./utils.mjs";
4
- export { index_d_exports as adapters, index_d_exports$1 as core, index_d_exports$2 as plugins, index_d_exports$3 as utils };
package/dist/index.mjs DELETED
@@ -1 +0,0 @@
1
- import{i as e}from"./core-D9Qw3QS-.mjs";import{t}from"./adapters-CJpzHbZe.mjs";import{t as n}from"./plugins.mjs";import{t as r}from"./utils.mjs";export{t as adapters,e as core,n as plugins,r as utils};
@@ -1,2 +0,0 @@
1
- import"./core/db/schema.mjs";import"./core-D9Qw3QS-.mjs";function e(e){return e.adv||e.code||e.bas||e.command}function t(t,n,r){if(t===n)return!0;if(t.mode===`Ext`||n.mode===`Ext`||!r?.skipDanuniMerge&&(t.extra?.danuni?.merge||n.extra?.danuni?.merge)||t.extra?.bili?.dmid&&n.extra?.bili?.dmid&&(e(t.extra.bili)||e(n.extra.bili)||t.extra?.bili.mid&&!n.extra?.bili.mid||!t.extra?.bili.mid&&n.extra?.bili.mid)||t.extra?.artplayer&&!n.extra?.artplayer||!t.extra?.artplayer&&n.extra?.artplayer||t.extra?.artplayer&&n.extra?.artplayer&&(t.extra?.artplayer.border!==n.extra?.artplayer.border||JSON.stringify(t.extra?.artplayer.style)!==JSON.stringify(n.extra?.artplayer.style)))return!1;let i=e=>t[e]===n[e];return[`SOID`,`content`,`mode`,`pool`,`platform`].every(e=>i(e))}export{t};
2
- //# sourceMappingURL=isSame-C-pceqgH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isSame-C-pceqgH.mjs","names":[],"sources":["../src/utils/isSame.ts"],"sourcesContent":["import { DMAttrSchema, ModeSchema, PoolSchema } from \"@/core/db/schema.ts\";\nimport type { ExtraBili } from \"@/core/dm-extra.ts\";\nimport { type UniDMObj } from \"@/core/dm.ts\";\nimport type { UniChunk } from \"@/core/index.ts\";\nimport type { z } from \"zod\";\n\ninterface UniDMComparable extends Omit<UniDMObj, \"mode\" | \"pool\" | \"attr\"> {\n mode: z.infer<typeof ModeSchema>;\n pool: z.infer<typeof PoolSchema>;\n attr: z.infer<typeof DMAttrSchema>[];\n}\n\ntype Comp = Pick<\n UniDMComparable | Awaited<UniChunk[\"$danmakus\"]>[number],\n \"SOID\" | \"content\" | \"mode\" | \"pool\" | \"platform\" | \"extra\"\n>;\n\nfunction biliSp(that: ExtraBili) {\n return that.adv || that.code || that.bas || that.command;\n}\n\nexport function isSame(that: Comp, dan: Comp, options?: { skipDanuniMerge?: boolean }): boolean {\n // 引用相同直接返回\n if (that === dan) return true;\n // 不支持比较高级弹幕\n if (that.mode === \"Ext\" || dan.mode === \"Ext\") return false;\n // 合并过视为不同,防止存在合并完成弹幕后再次合并造成计数错误\n if (!options?.skipDanuniMerge && (that.extra?.danuni?.merge || dan.extra?.danuni?.merge))\n return false;\n // 如果是bili弹幕,则以dmid判断是否相同\n if (that.extra?.bili?.dmid && dan.extra?.bili?.dmid) {\n // bili所有非一般类型的弹幕均直接判断为不同\n if (biliSp(that.extra.bili) || biliSp(dan.extra.bili)) return false;\n // 下面只会有来自 std/up 源的普通弹幕\n // 此时可以用mid原始值是否存在判断是否为up源弹幕\n // 当来源不同(标准源/创作中心源)时,视为不同弹幕\n if (\n (that.extra?.bili.mid && !dan.extra?.bili.mid) ||\n (!that.extra?.bili.mid && dan.extra?.bili.mid)\n )\n return false;\n // 不对dmid等原始值备份进行比较(若比较dmid,则必定不同,不符合比较函数使用场景)\n // 直接跳出bili特定判断,进入后续通用比较\n }\n // 如果是artplayer弹幕,需额外比较extra项目\n if (\n (that.extra?.artplayer && !dan.extra?.artplayer) ||\n (!that.extra?.artplayer && dan.extra?.artplayer)\n )\n return false;\n else if (\n that.extra?.artplayer &&\n dan.extra?.artplayer &&\n (that.extra?.artplayer.border !== dan.extra?.artplayer.border ||\n JSON.stringify(that.extra?.artplayer.style) !== JSON.stringify(dan.extra?.artplayer.style))\n )\n return false;\n const isSame = (k: keyof Comp) => that[k] === dan[k];\n const checks = ([\"SOID\", \"content\", \"mode\", \"pool\", \"platform\"] satisfies (keyof Comp)[]).every(\n (k) => isSame(k),\n );\n // 忽略使用了extra字段却不在mode里标记的弹幕\n return checks;\n}\n"],"mappings":"yDAiBA,SAAS,EAAO,EAAiB,CAC/B,OAAO,EAAK,KAAO,EAAK,MAAQ,EAAK,KAAO,EAAK,OACnD,CAEA,SAAgB,EAAO,EAAY,EAAW,EAAkD,CAE9F,GAAI,IAAS,EAAK,MAAO,GA2BpB,GAzBD,EAAK,OAAS,OAAS,EAAI,OAAS,OAEpC,CAAC,GAAS,kBAAoB,EAAK,OAAO,QAAQ,OAAS,EAAI,OAAO,QAAQ,QAG9E,EAAK,OAAO,MAAM,MAAQ,EAAI,OAAO,MAAM,OAEzC,EAAO,EAAK,MAAM,IAAI,GAAK,EAAO,EAAI,MAAM,IAAI,GAKjD,EAAK,OAAO,KAAK,KAAO,CAAC,EAAI,OAAO,KAAK,KACzC,CAAC,EAAK,OAAO,KAAK,KAAO,EAAI,OAAO,KAAK,MAQ3C,EAAK,OAAO,WAAa,CAAC,EAAI,OAAO,WACrC,CAAC,EAAK,OAAO,WAAa,EAAI,OAAO,WAItC,EAAK,OAAO,WACZ,EAAI,OAAO,YACV,EAAK,OAAO,UAAU,SAAW,EAAI,OAAO,UAAU,QACrD,KAAK,UAAU,EAAK,OAAO,UAAU,KAAK,IAAM,KAAK,UAAU,EAAI,OAAO,UAAU,KAAK,GAE3F,MAAO,GACT,IAAM,EAAU,GAAkB,EAAK,KAAO,EAAI,GAKlD,MAJgB,CAAC,OAAQ,UAAW,OAAQ,OAAQ,UAAU,EAA4B,MACvF,GAAM,EAAO,CAAC,CAGL,CACd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins.d.mts","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;;;;;;SAAqD,IAAA;SAAA,KAAA;;;;;;;;;;;;;;;cCErE,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;;;;;;;;;;;;;;;wBAGc,CAAA,WAAA,GAAA;;;;;;;;;;;iBAiBR,oBAAA,oBAAwC,OAAA,EAAS,GAAA,CAAI,CAAA;;;;;;;;;;cC5BxD,uBAAA,GAAuB,QAAA,yBACJ,QAAA,EAAQ,MAAA,EAAU,CAAA,KAAI,OAAA,CAAQ,CAAA;AAAA"}
package/dist/plugins.mjs DELETED
@@ -1,2 +0,0 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.mjs";import{danmakusSelectZod as t}from"./core/db/schema.mjs";import{n}from"./core-D9Qw3QS-.mjs";import{a as r,i}from"./adapters-CJpzHbZe.mjs";import{t as a}from"./isSame-C-pceqgH.mjs";const o=r(e=>e.length),s=({include:e,exclude:t}={})=>i(async r=>{e||=[],t||=[];let i=n=>e?.includes(n)||!t?.includes(n),a=await n.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});t.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=await t,i=e=>{let t=new Map;for(let n of r){let r=n[e];t.set(r,(t.get(r)??0)+1)}n[e]=t};for(let t of e)i(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 t=>{let r=await n.makeChunk(t,{tmp:!0}),i=[...await t.$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};
2
- //# sourceMappingURL=plugins.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins.mjs","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 dans = await udanmakus;\n const buildStatMap = <K extends T[number]>(key: K) => {\n const statMap = new Map<StatsItem[K], number>();\n for (const dan of dans) {\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 +0,0 @@
1
- {"version":3,"file":"schema-CUhPWl_o.d.mts","names":["T","KeyType"],"sources":["../node_modules/type-fest/source/simplify.d.ts","../src/core/db/schema.ts"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils/fileParser.ts","../src/utils/isSame.ts","../src/utils/wildcardAdapter.ts","../src/utils/zlib.ts","../src/utils/index.ts"],"mappings":";;;;;;iBAAgB,UAAA,CAAW,IAAA,WAAe,GAAA,UAAa,WAAA,GAAc,UAAU;AAAA,iBAC/D,UAAA,CAAW,IAAA,WAAe,GAAa;AAAA,iBACvC,UAAA,mBAA6B,IAAA,WAAe,GAAA,WAAc,CAAC;;;UCIjE,eAAA,SAAwB,IAAA,CAAK,QAAA;EACrC,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,UAAA;EACrB,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,UAAA;EACrB,IAAA,EAAM,CAAA,CAAE,KAAA,QAAa,YAAA;AAAA;AAAA,KAGlB,IAAA,GAAO,IAAA,CACV,eAAA,GAAkB,OAAA,CAAQ,QAAA;AAAA,iBAQZ,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,IAAI,EAAE,OAAA;EAAY,eAAA;AAAA;;;;;;;;ADrB1D;;;cEWa,uBAAA,GAAuB,CAAA,EAC/B,WAAA,GAAc,QAAA,EAAQ,YAAA,EACX,QAAA,IAAU,IAAA,cACX,OAAA,CAAA,OAAA,UAAA,QAAA;AAAA,cAoBF,qBAAA,GAAqB,WAAA,GAClB,QAAA,EAAU,OAAA,KAAU,EAAA,cAEhC,QAAA,EAAU,OAAA;AAAA,cAmBD,mBAAA,GAAmB,CAAA,EAC3B,WAAA,GAAc,QAAA,EAAQ,WAAA,GACX,QAAA,EAAU,OAAA,KAAU,EAAA,UACxB,IAAA,cACG,OAAA,CAAA,OAAA,UAAA,QAAA;;;iBCzDC,QAAA,WAAmB,SAAA,EAAW,IAAA,EAAM,CAAA,GAAI,MAAA,CAAO,WAAA;AAAA,iBAI/C,UAAA,mBAA6B,IAAA,EAAM,SAAA,EAAW,IAAA,WAAe,CAAC;AAAA,iBAC9D,UAAA,mBAA6B,IAAA,EAAM,SAAA,EAAW,IAAA,UAAc,CAAC;AAAA,iBAC7D,UAAA,WAAqB,MAAA,CAAO,WAAA,GAAc,IAAA,EAAM,SAAA,EAAW,IAAA,WAAe,CAAA;AAAA"}
package/dist/utils.mjs DELETED
@@ -1,2 +0,0 @@
1
- import{t as e}from"./chunk-DK3Fl9T5.mjs";import{m as t,n}from"./core-D9Qw3QS-.mjs";import"./adapters-CJpzHbZe.mjs";import{t as r}from"./isSame-C-pceqgH.mjs";import{zstdCompressSync as i,zstdDecompressSync as a}from"node:zlib";function o(e,t){let n=e instanceof ArrayBuffer||e instanceof Uint8Array;switch(t){case`bin`:if(n)return e;throw TypeError(`Expected binary data for mod "bin"`);case`string`:if(typeof e==`string`)return e;if(n)return new TextDecoder().decode(e);throw TypeError(`Expected binary data or string for mod "string"`);case`json`:{if(typeof e==`object`&&e&&!n)return e;if(typeof e!=`string`&&!n)throw TypeError(`Expected object, JSON string, or binary data for mod "json"`);let t=typeof e==`string`?e:new TextDecoder().decode(e);try{return JSON.parse(t)}catch{throw Error(`Invalid JSON string`)}}default:throw Error(`Unsupported mod`)}}const s=async(e,t,r)=>{let i=e instanceof n?e:await e.makeChunk({});for(let e of t){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},c=(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},l=async(e,t,r,i)=>s(e instanceof n?e:await e.makeChunk({}),c(t,r).map(([e])=>e),i);function u(e){return i(e)}function d(e,n=`bin`){let r=a(e);return n===`bin`?r:n===`str`?r.toString(`utf8`):t.parse(r.toString(`utf8`))}var f=e({WildcardAdapterUtil:()=>l,WildcardBodyAdapterUtil:()=>s,WildcardFnAdapterUtil:()=>c,compress:()=>u,decompress:()=>d,fileParser:()=>o,isSame:()=>r});export{l as WildcardAdapterUtil,s as WildcardBodyAdapterUtil,c as WildcardFnAdapterUtil,u as compress,d as decompress,o as fileParser,r as isSame,f as t};
2
- //# sourceMappingURL=utils.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.mjs","names":["JSON"],"sources":["../src/utils/fileParser.ts","../src/utils/wildcardAdapter.ts","../src/utils/zlib.ts","../src/utils/index.ts"],"sourcesContent":["export function fileParser(file: unknown, mod: \"bin\"): ArrayBuffer | Uint8Array;\nexport function fileParser(file: unknown, mod: \"string\"): string;\nexport function fileParser<T extends object>(file: unknown, mod: \"json\"): T;\nexport function fileParser(\n file: unknown,\n mod: \"bin\" | \"string\" | \"json\",\n): ArrayBuffer | Uint8Array | string | object {\n const isBinary = file instanceof ArrayBuffer || file instanceof Uint8Array;\n switch (mod) {\n case \"bin\": {\n if (isBinary) return file;\n throw new TypeError('Expected binary data for mod \"bin\"');\n }\n case \"string\": {\n if (typeof file === \"string\") return file;\n if (isBinary) return new TextDecoder().decode(file);\n throw new TypeError('Expected binary data or string for mod \"string\"');\n }\n case \"json\": {\n if (typeof file === \"object\" && file !== null && !isBinary) return file;\n if (typeof file !== \"string\" && !isBinary) {\n throw new TypeError('Expected object, JSON string, or binary data for mod \"json\"');\n }\n const str = typeof file === \"string\" ? file : new TextDecoder().decode(file);\n try {\n return JSON.parse(str);\n } catch {\n throw new Error(\"Invalid JSON string\");\n }\n }\n default:\n throw new Error(\"Unsupported mod\");\n }\n}\n","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 const WildcardAdapterUtil = async (\n u: InitedUniDB | UniChunk,\n handlerList: [Metadata, Adapter][],\n fn: string,\n body: unknown,\n) => {\n const uchunk = u instanceof UniChunk ? u : await u.makeChunk({});\n const possileHandlers = WildcardFnAdapterUtil(handlerList, fn);\n return WildcardBodyAdapterUtil(\n uchunk,\n possileHandlers.map(([m]) => m),\n body,\n );\n};\n","import { zstdCompressSync, zstdDecompressSync, type InputType } from \"node:zlib\";\nimport { JSON } from \"@/utils/bigint.ts\";\n\nexport function compress<T extends InputType>(data: T): Buffer<ArrayBuffer> {\n return zstdCompressSync(data);\n}\n\nexport function decompress<P extends object>(data: InputType, type: \"json\"): P;\nexport function decompress<P extends string>(data: InputType, type: \"str\"): P;\nexport function decompress<P extends Buffer<ArrayBuffer>>(data: InputType, type?: \"bin\"): P;\nexport function decompress<P extends Buffer<ArrayBuffer> | string | object>(\n data: InputType,\n type: \"bin\" | \"str\" | \"json\" = \"bin\",\n): P {\n const d: Buffer<ArrayBuffer> = zstdDecompressSync(data);\n if (type === \"bin\") return d as P;\n if (type === \"str\") return d.toString(\"utf8\") as P;\n return JSON.parse(d.toString(\"utf8\")) as P;\n}\n","export * from \"./fileParser.ts\";\nexport * from \"./isSame.ts\";\nexport * from \"./wildcardAdapter.ts\";\nexport * from \"./zlib.ts\";\n"],"mappings":"kOAGA,SAAgB,EACd,EACA,EAC4C,CAC5C,IAAM,EAAW,aAAgB,aAAe,aAAgB,WAChE,OAAQ,EAAR,CACE,IAAK,MACH,GAAI,EAAU,OAAO,EACrB,MAAU,UAAU,oCAAoC,EAE1D,IAAK,SACH,GAAI,OAAO,GAAS,SAAU,OAAO,EACrC,GAAI,EAAU,OAAO,IAAI,YAAY,EAAE,OAAO,CAAI,EAClD,MAAU,UAAU,iDAAiD,EAEvE,IAAK,OAAQ,CACX,GAAI,OAAO,GAAS,UAAY,GAAiB,CAAC,EAAU,OAAO,EACnE,GAAI,OAAO,GAAS,UAAY,CAAC,EAC/B,MAAU,UAAU,6DAA6D,EAEnF,IAAM,EAAM,OAAO,GAAS,SAAW,EAAO,IAAI,YAAY,EAAE,OAAO,CAAI,EAC3E,GAAI,CACF,OAAO,KAAK,MAAM,CAAG,CACvB,MAAQ,CACN,MAAU,MAAM,qBAAqB,CACvC,CACF,CACA,QACE,MAAU,MAAM,iBAAiB,CACrC,CACF,CCtBA,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,EAEa,EAAsB,MACjC,EACA,EACA,EACA,IAIO,EAFQ,aAAa,EAAW,EAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EACvC,EAAsB,EAAa,CAG3C,EAAE,KAAK,CAAC,KAAO,CAAC,EAC9B,CACF,ECjEF,SAAgB,EAA8B,EAA8B,CAC1E,OAAO,EAAiB,CAAI,CAC9B,CAKA,SAAgB,EACd,EACA,EAA+B,MAC5B,CACH,IAAM,EAAyB,EAAmB,CAAI,EAGtD,OAFI,IAAS,MAAc,EACvB,IAAS,MAAc,EAAE,SAAS,MAAM,EACrCA,EAAK,MAAM,EAAE,SAAS,MAAM,CAAC,CACtC"}
File without changes