@dan-uni/dan-any 2.1.8 → 2.2.1
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.
- package/README.md +35 -10
- package/dist/adapters-CJpzHbZe.mjs +2 -0
- package/dist/adapters-CJpzHbZe.mjs.map +1 -0
- package/dist/adapters.d.mts +2 -2
- package/dist/adapters.mjs +1 -1
- package/dist/core/db/schema.d.mts +1 -1
- package/dist/core/db/utils.d.mts +2 -1703
- package/dist/core/main/drizzle.d.mts +2 -0
- package/dist/core/main/drizzle.mjs +1 -0
- package/dist/core/main/pure.d.mts +2 -0
- package/dist/core/main/pure.mjs +1 -0
- package/dist/core-D9Qw3QS-.mjs +2 -0
- package/dist/core-D9Qw3QS-.mjs.map +1 -0
- package/dist/core.d.mts +3 -2
- package/dist/core.mjs +1 -1
- package/dist/{dm-extra-CK22Zdoa.d.mts → dm-extra-6EjI8V-C.d.mts} +2 -2
- package/dist/{dm-extra-CK22Zdoa.d.mts.map → dm-extra-6EjI8V-C.d.mts.map} +1 -1
- package/dist/{index-FA4prRvt.d.mts → index-CIOKEu88.d.mts} +488 -1522
- package/dist/index-CIOKEu88.d.mts.map +1 -0
- package/dist/index-DLr9qdb5.d.mts +1703 -0
- package/dist/{core/db/utils.d.mts.map → index-DLr9qdb5.d.mts.map} +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{isSame-5L-ejxzG.mjs → isSame-C-pceqgH.mjs} +2 -2
- package/dist/{isSame-5L-ejxzG.mjs.map → isSame-C-pceqgH.mjs.map} +1 -1
- package/dist/plugins.d.mts +8 -8
- package/dist/plugins.d.mts.map +1 -1
- package/dist/plugins.mjs +1 -1
- package/dist/plugins.mjs.map +1 -1
- package/dist/{schema-mO6Zqxyb.d.mts → schema-CUhPWl_o.d.mts} +2 -2
- package/dist/schema-CUhPWl_o.d.mts.map +1 -0
- package/dist/utils.d.mts +2 -2
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +1 -1
- package/dist/utils.mjs.map +1 -1
- package/package.json +11 -9
- package/dist/core-BdTujEkj.mjs +0 -2
- package/dist/core-BdTujEkj.mjs.map +0 -1
- package/dist/index-FA4prRvt.d.mts.map +0 -1
- package/dist/schema-mO6Zqxyb.d.mts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"index-DLr9qdb5.d.mts","names":[],"sources":["../src/core/db/index.ts"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { tt as index_d_exports$1, u as index_d_exports } from "./index-CIOKEu88.mjs";
|
|
2
2
|
import { t as index_d_exports$2 } from "./plugins.mjs";
|
|
3
3
|
import { t as index_d_exports$3 } from "./utils.mjs";
|
|
4
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
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e
|
|
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 +1,2 @@
|
|
|
1
|
-
import"./core/db/schema.mjs";import"./core-
|
|
2
|
-
//# sourceMappingURL=isSame-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isSame-
|
|
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"}
|
package/dist/plugins.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as Extra } from "./dm-extra-
|
|
2
|
-
import {
|
|
1
|
+
import { t as Extra } from "./dm-extra-6EjI8V-C.mjs";
|
|
2
|
+
import { Q as UniChunk } from "./index-CIOKEu88.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/plugins/count.d.ts
|
|
@@ -7,7 +7,7 @@ import { z } from "zod";
|
|
|
7
7
|
* 计数转换器:统计弹幕数量,适用于需要获取弹幕总数的场景
|
|
8
8
|
* @deprecated 建议直接使用UniChunk的$count属性获取弹幕数量
|
|
9
9
|
*/
|
|
10
|
-
declare const CountTransformer: (udanmakus:
|
|
10
|
+
declare const CountTransformer: (udanmakus: {
|
|
11
11
|
DMID: string;
|
|
12
12
|
SOID: string;
|
|
13
13
|
attr: ("Compatible" | "FromLive" | "HasEvent" | "Hide" | "HighLike" | "Protect" | "Reported" | "Unchecked")[];
|
|
@@ -22,7 +22,7 @@ declare const CountTransformer: (udanmakus: Promise<{
|
|
|
22
22
|
progress: number;
|
|
23
23
|
senderID: string;
|
|
24
24
|
weight: number;
|
|
25
|
-
}[]
|
|
25
|
+
}[]) => number;
|
|
26
26
|
//#endregion
|
|
27
27
|
//#region src/plugins/downgradeAdvcanced.d.ts
|
|
28
28
|
/**
|
|
@@ -35,7 +35,7 @@ declare const DowngradeAdvancedPluginConfigurator: ({
|
|
|
35
35
|
}?: {
|
|
36
36
|
include?: (keyof Extra)[];
|
|
37
37
|
exclude?: (keyof Extra)[];
|
|
38
|
-
}) => (uchunk:
|
|
38
|
+
}) => <T extends UniChunk>(uchunk: T) => Promise<T>;
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region src/plugins/getStats.d.ts
|
|
41
41
|
declare const statsItemZod: z.ZodObject<{
|
|
@@ -64,7 +64,7 @@ declare const statsItemZod: z.ZodObject<{
|
|
|
64
64
|
in: {};
|
|
65
65
|
}>;
|
|
66
66
|
type StatsItem = z.infer<typeof statsItemZod>;
|
|
67
|
-
declare const GetStatsTransformerConfigurator: <const T extends readonly (keyof StatsItem)[]>(items: T) => (udanmakus:
|
|
67
|
+
declare const GetStatsTransformerConfigurator: <const T extends readonly (keyof StatsItem)[]>(items: T) => (udanmakus: {
|
|
68
68
|
DMID: string;
|
|
69
69
|
SOID: string;
|
|
70
70
|
attr: ("Compatible" | "FromLive" | "HasEvent" | "Hide" | "HighLike" | "Protect" | "Reported" | "Unchecked")[];
|
|
@@ -79,7 +79,7 @@ declare const GetStatsTransformerConfigurator: <const T extends readonly (keyof
|
|
|
79
79
|
progress: number;
|
|
80
80
|
senderID: string;
|
|
81
81
|
weight: number;
|
|
82
|
-
}[]
|
|
82
|
+
}[]) => Promise<{ [K in T[number]]: Map<{
|
|
83
83
|
SOID: string;
|
|
84
84
|
mode: "Bottom" | "Ext" | "Normal" | "Reverse" | "Top";
|
|
85
85
|
fontsize: number;
|
|
@@ -100,7 +100,7 @@ declare function GetStatsUtil4getMost<T extends unknown>(statMap: Map<T, number>
|
|
|
100
100
|
* 合并一定时间段内的重复弹幕,防止同屏出现过多
|
|
101
101
|
* @param lifetime 查重时间区段,单位秒 (默认为 0,表示不查重)
|
|
102
102
|
*/
|
|
103
|
-
declare const MergePluginConfigurator: (lifetime?: number) => (uchunk:
|
|
103
|
+
declare const MergePluginConfigurator: (lifetime?: number) => <T extends UniChunk>(uchunk: T) => Promise<T>;
|
|
104
104
|
declare namespace index_d_exports {
|
|
105
105
|
export { CountTransformer, DowngradeAdvancedPluginConfigurator, GetStatsTransformerConfigurator, GetStatsUtil4getMost, MergePluginConfigurator };
|
|
106
106
|
}
|
package/dist/plugins.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./chunk-DK3Fl9T5.mjs";import{danmakusSelectZod as t}from"./core/db/schema.mjs";import{
|
|
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
2
|
//# sourceMappingURL=plugins.mjs.map
|
package/dist/plugins.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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.then((d) => d.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 (uchunk) => {\n if (!include) include = [];\n if (!exclude) exclude = [];\n const check = (k: keyof Extra) => include?.includes(k) || !exclude?.includes(k);\n const chunk = 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 (uchunk) => {\n const chunk = await UniChunk.makeChunk(uchunk, { tmp: true });\n const sourceDanmakus = [...(await uchunk.$danmakus)].sort(\n (a, b) => a.progress - b.progress || a.ctime.getTime() - b.ctime.getTime(),\n );\n\n if (lifetime <= 0) {\n await chunk.upsertDanmakus(sourceDanmakus, false);\n return chunk;\n }\n\n const lifetimeMs = lifetime * 1000;\n const makeKey = (d: (typeof sourceDanmakus)[number]) =>\n [d.SOID, d.content, d.mode, d.pool, d.platform ?? \"\"].join(\"|\");\n\n type MergeGroup = {\n base: (typeof sourceDanmakus)[number];\n lastProgress: number;\n senders: string[];\n senderSet: Set<string>;\n members: (typeof sourceDanmakus)[number][];\n };\n\n const groups = new Map<string, MergeGroup[]>();\n const orderedGroups: MergeGroup[] = [];\n\n for (const dan of sourceDanmakus) {\n const key = makeKey(dan);\n const bucket = groups.get(key) ?? [];\n let current: MergeGroup | undefined;\n\n for (let index = bucket.length - 1; index >= 0; index--) {\n const candidate = bucket[index];\n if (dan.progress - candidate.lastProgress > lifetimeMs) break;\n if (isSame(candidate.base, dan)) {\n current = candidate;\n break;\n }\n }\n\n if (current) {\n current.members.push(dan);\n current.lastProgress = dan.progress;\n if (!current.senderSet.has(dan.senderID)) {\n current.senderSet.add(dan.senderID);\n current.senders.push(dan.senderID);\n }\n continue;\n }\n\n const nextGroup: MergeGroup = {\n base: dan,\n lastProgress: dan.progress,\n senders: [dan.senderID],\n senderSet: new Set([dan.senderID]),\n members: [dan],\n };\n bucket.push(nextGroup);\n groups.set(key, bucket);\n orderedGroups.push(nextGroup);\n }\n\n await chunk.upsertDanmakus(\n orderedGroups.map((group) => {\n if (group.members.length === 1) {\n return group.base;\n }\n\n const merge = {\n duration: group.lastProgress - group.base.progress,\n count: group.members.length,\n senders: group.senders,\n taolu_count: group.members.length,\n taolu_senders: group.senders,\n };\n let extra: Extra | null = group.base.extra\n ? {\n ...group.base.extra,\n danuni: {\n ...(group.base.extra.danuni ? group.base.extra.danuni : {}),\n merge,\n },\n }\n : {\n danuni: {\n merge,\n },\n };\n if (group.senders.length === 1) {\n const danuni = extra.danuni;\n if (danuni?.merge) {\n const { merge: _merge, ...danuniRest } = danuni;\n if (Object.keys(danuniRest).length > 0) {\n extra = {\n ...extra,\n danuni: danuniRest,\n };\n } else {\n const { danuni: _danuni, ...extraRest } = extra;\n extra = Object.keys(extraRest).length > 0 ? extraRest : null;\n }\n }\n }\n const attr = group.base.attr.includes(DMAttr.Protect)\n ? group.base.attr\n : [...group.base.attr, DMAttr.Protect];\n const senderID = \"merge[bot]@dan-any\";\n\n return {\n ...group.base,\n senderID,\n attr,\n extra,\n DMID: chunk.$UniDB.DMIDGenerator({\n ...group.base,\n extra: extra && Object.keys(extra).length > 0 ? extra : null,\n senderID,\n }),\n };\n }),\n );\n return chunk;\n });\n","export * from \"./count.ts\";\nexport * from \"./downgradeAdvcanced.ts\";\nexport * from \"./getStats.ts\";\nexport * from \"./merge.ts\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugins.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,4 +1,4 @@
|
|
|
1
|
-
import { t as Extra } from "./dm-extra-
|
|
1
|
+
import { t as Extra } from "./dm-extra-6EjI8V-C.mjs";
|
|
2
2
|
import * as t from "drizzle-orm/pg-core";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
@@ -1614,4 +1614,4 @@ declare const DMAttrSchema: z.ZodEnum<{
|
|
|
1614
1614
|
}>;
|
|
1615
1615
|
//#endregion
|
|
1616
1616
|
export { onConflictDoUpdateSet as _, PoolSchema as a, Simplify as b, chunk2danmakusZod as c, danmakus as d, danmakusInsertZod as f, onConflictDoUpdate as g, modeEnum as h, ModeSchema as i, chunks as l, dmAttrEnum as m, DanmakusInsert as n, baseRelations as o, danmakusSelectZod as p, DanmakusSelect as r, chunk2danmakus as s, DMAttrSchema as t, chunksZod as u, poolEnum as v, relations as y };
|
|
1617
|
-
//# sourceMappingURL=schema-
|
|
1617
|
+
//# sourceMappingURL=schema-CUhPWl_o.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as PoolSchema, i as ModeSchema, t as DMAttrSchema } from "./schema-
|
|
1
|
+
import { J as InitedUniDB, Q as UniChunk, n as Metadata, t as Adapter, vt as UniDMObj } from "./index-CIOKEu88.mjs";
|
|
2
|
+
import { a as PoolSchema, i as ModeSchema, t as DMAttrSchema } from "./schema-CUhPWl_o.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { InputType } from "node:zlib";
|
|
5
5
|
|
package/dist/utils.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./chunk-DK3Fl9T5.mjs";import{
|
|
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
2
|
//# sourceMappingURL=utils.mjs.map
|
package/dist/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dan-uni/dan-any",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "A danmaku transformer lib, supporting danmaku from different platforms.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bangumi",
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"./core": "./dist/core.mjs",
|
|
27
27
|
"./core/db/schema": "./dist/core/db/schema.mjs",
|
|
28
28
|
"./core/db/utils": "./dist/core/db/utils.mjs",
|
|
29
|
+
"./core/main/drizzle": "./dist/core/main/drizzle.mjs",
|
|
30
|
+
"./core/main/pure": "./dist/core/main/pure.mjs",
|
|
29
31
|
"./plugins": "./dist/plugins.mjs",
|
|
30
32
|
"./utils": "./dist/utils.mjs",
|
|
31
33
|
"./package.json": "./package.json"
|
|
@@ -44,8 +46,8 @@
|
|
|
44
46
|
},
|
|
45
47
|
"dependencies": {
|
|
46
48
|
"@bufbuild/protobuf": "^2.12.0",
|
|
47
|
-
"@electric-sql/pglite": "^0.
|
|
48
|
-
"@electric-sql/pglite-tools": "^0.
|
|
49
|
+
"@electric-sql/pglite": "^0.5.1",
|
|
50
|
+
"@electric-sql/pglite-tools": "^0.4.1",
|
|
49
51
|
"@noble/hashes": "^2.2.0",
|
|
50
52
|
"drizzle-orm": "^1.0.0-rc.4-5d5b77c",
|
|
51
53
|
"fast-xml-builder": "^1.2.0",
|
|
@@ -59,15 +61,15 @@
|
|
|
59
61
|
"@bufbuild/protoc-gen-es": "^2.12.0",
|
|
60
62
|
"@types/json-bigint": "^1.0.4",
|
|
61
63
|
"@types/node": "^25.9.1",
|
|
62
|
-
"@typescript/native-preview": "^7.0.0-dev.
|
|
63
|
-
"@vitest/ui": "^4.1.
|
|
64
|
+
"@typescript/native-preview": "^7.0.0-dev.20260605.1",
|
|
65
|
+
"@vitest/ui": "^4.1.8",
|
|
64
66
|
"bumpp": "^11.1.0",
|
|
65
67
|
"bun-types": "^1.3.14",
|
|
66
68
|
"drizzle-kit": "^1.0.0-rc.4-ca0f029",
|
|
67
|
-
"protobufjs": "^8.
|
|
68
|
-
"type-fest": "^5.
|
|
69
|
+
"protobufjs": "^8.6.0",
|
|
70
|
+
"type-fest": "^5.7.0",
|
|
69
71
|
"typescript": "^6.0.3",
|
|
70
|
-
"vite-plus": "^0.1.
|
|
72
|
+
"vite-plus": "^0.1.24"
|
|
71
73
|
},
|
|
72
74
|
"overrides": {
|
|
73
75
|
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
|
|
@@ -75,7 +77,7 @@
|
|
|
75
77
|
},
|
|
76
78
|
"packageManager": "bun@1.3.14",
|
|
77
79
|
"inlinedDependencies": {
|
|
78
|
-
"type-fest": "5.
|
|
80
|
+
"type-fest": "5.7.0"
|
|
79
81
|
},
|
|
80
82
|
"trustedDependencies": [
|
|
81
83
|
"protobufjs"
|
package/dist/core-BdTujEkj.mjs
DELETED
|
@@ -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 ee}from"@noble/hashes/sha3.js";import te from"json-bigint";import{bytesToHex as ne,utf8ToBytes as re}from"@noble/hashes/utils.js";import{fileDesc as ie,messageDesc as d}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as ae,timestampDate as oe,timestampFromDate as se,timestampNow as ce}from"@bufbuild/protobuf/wkt";import{create as le,fromBinary as f,toBinary as ue}from"@bufbuild/protobuf";import{XMLParser as de}from"fast-xml-parser";import fe from"fast-xml-builder";const p=te({useNativeBigInt:!0});var pe=`@dan-uni/dan-any`,me=`2.1.8`;let m=function(e){return e.Bangumi=`bgm`,e.TMDB=`tmdb`,e}({});const h=Object.values(m);let g=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 _=Object.values(g);let v=function(e){return e.DanDanPlay=`ddplay`,e.TuCao=`tucao`,e}({});const he=Object.values(v),y=[..._,...he],ge=[...h,...y],_e=u.templateLiteral([u.string(),`@`,u.string()]);var b=class e{id;domain;constructor(e,t){this.id=e,this.domain=t}static validateString(e){return _e.safeParse(e).success}static fromStringSafe(e){return this.fromString(_e.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 x=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}({}),S=function(e){return e[e.Def=0]=`Def`,e[e.Sub=1]=`Sub`,e[e.Adv=2]=`Adv`,e[e.Ix=3]=`Ix`,e}({}),C=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 w={SOID:b.fromNull().toString(),progress:0,mode:0,fontsize:25,color:16777215,senderID:b.fromNull().toString(),content:``,weight:0,pool:0,attr:[],platform:null,extra:null},T={meassage:`Converted by DanUni!`,version:`JS/TS ${pe} (v${me})`},ve=e=>e?[`adv`,`bas`,`code`,`command`].some(t=>e[t]):!1;function ye(e){return e.mode!==`Ext`&&e.extra&&(e.extra.artplayer||ve(e.extra.bili))?(e.mode=`Ext`,!0):!1}function be(e){let t=p.parse(e);return{...t,bili:t.bili?{...t.bili,dmid:t.bili.dmid?.toString(),mid:t.bili.mid?.toString()}:void 0}}const xe=u.float32(),Se=u.int();function Ce(e){return Se.parse(~~(xe.parse(e)*1e3))}const E=u.codec(u.enum(x).default(0),u.enum(r.mode.enumValues),{decode:e=>r.mode.enumValues[e]||`Normal`,encode:e=>x[e]||0}),D=u.codec(u.enum(S).default(0),u.enum(r.pool.enumValues),{decode:e=>r.pool.enumValues[e]||`Def`,encode:e=>S[e]||0}),O=u.codec(u.enum(C).array(),u.enum(r.attr.enumValues).array(),{decode:e=>e,encode:e=>e.map(e=>C[e])});function we(e){let t=!Number.isInteger(e.progress),n=typeof e.extraStr==`string`;return t||n}const k=J((e,t)=>async(n,r)=>{let i=new Date,a=r??await n.makeChunk({}),o=t?.isV1?!0:e.some(e=>we(e));return await a.upsertDanmakus(e.map(e=>{let t={SOID:e.SOID||w.SOID,progress:e.progress?o?Ce(e.progress):e.progress:w.progress,mode:E.decode(e.mode),fontsize:e.fontsize??w.fontsize,color:e.color??w.color,senderID:e.senderID||w.senderID,content:e.content??w.content,ctime:e.ctime?new Date(e.ctime):i,weight:e.weight??w.weight,pool:D.decode(e.pool),attr:e.attr?O.decode(e.attr):w.attr,platform:e.platform??w.platform,extra:e.extra??(e.extraStr?be(e.extraStr):w.extra)};return ye(t),{...t,DMID:!o&&e.DMID?e.DMID:a.$UniDB.DMIDGenerator(t)}})),a});function Te(e){return Y(t=>t.then(t=>e?.minify?t.map(e=>({SOID:e.SOID===w.SOID?void 0:e.SOID,progress:e.progress===w.progress?void 0:e.progress,mode:e.mode===`Normal`?void 0:E.encode(e.mode),fontsize:e.fontsize===w.fontsize?void 0:e.fontsize,color:e.color===w.color?void 0:e.color,senderID:e.senderID===w.senderID?void 0:e.senderID,content:e.content===w.content?void 0:e.content,ctime:e.ctime,weight:e.weight===w.weight?void 0:e.weight,pool:e.pool===`Def`?void 0:D.encode(e.pool),attr:e.attr&&e.attr.length>0?O.encode(e.attr):void 0,platform:e.platform??void 0,extra:e.extra??void 0,DMID:e.DMID})):t.map(e=>({...e,mode:E.encode(e.mode),pool:D.encode(e.pool),attr:O.encode(e.attr)}))))}const Ee=X({type:`danuni.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return e.import(k(t))}catch{return null}}}}),A=d(ie(`Ch9kYW51bmkvZGFubWFrdS92MS9kYW5tYWt1LnByb3RvEhFkYW51bmkuZGFubWFrdS52MSI2Cg5MaXN0RGFuUmVxdWVzdBIKCgJpZBgBIAEoCRIQCgNzZWcYAiABKAVIAIgBAUIGCgRfc2VnIpMDCgdEYW5tYWt1EhIKBHNvaWQYASABKAlSBFNPSUQSEgoEZG1pZBgCIAEoCVIERE1JRBIQCghwcm9ncmVzcxgDIAEoBRIlCgRtb2RlGAQgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuTW9kZRIQCghmb250c2l6ZRgFIAEoBRINCgVjb2xvchgGIAEoBRIbCglzZW5kZXJfaWQYByABKAlSCHNlbmRlcklEEg8KB2NvbnRlbnQYCCABKAkSKQoFY3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBndlaWdodBgKIAEoBRIlCgRwb29sGAsgASgOMhcuZGFudW5pLmRhbm1ha3UudjEuUG9vbBIMCgRhdHRyGAwgAygJEhUKCHBsYXRmb3JtGA0gASgJSACIAQESGQoIZXh0cmFfdjEYDiABKAlCAhgBSAGIAQESEgoFZXh0cmEYDyABKAlIAogBAUILCglfcGxhdGZvcm1CCwoJX2V4dHJhX3YxQggKBl9leHRyYSI/Cg9MaXN0RGFuUmVzcG9uc2USLAoIZGFubWFrdXMYASADKAsyGi5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1KmIKBE1vZGUSGwoXTU9ERV9OT1JNQUxfVU5TUEVDSUZJRUQQABIPCgtNT0RFX0JPVFRPTRABEgwKCE1PREVfVE9QEAISEAoMTU9ERV9SRVZFUlNFEAMSDAoITU9ERV9FWFQQBCpJCgRQb29sEhgKFFBPT0xfREVGX1VOU1BFQ0lGSUVEEAASDAoIUE9PTF9TVUIQARIMCghQT09MX0FEVhACEgsKB1BPT0xfSVgQAzJkCg5EYW5tYWt1U2VydmljZRJSCgdMaXN0RGFuEiEuZGFudW5pLmRhbm1ha3UudjEuTGlzdERhblJlcXVlc3QaIi5kYW51bmkuZGFubWFrdS52MS5MaXN0RGFuUmVzcG9uc2UiAEKLAQoVY29tLmRhbnVuaS5kYW5tYWt1LnYxQgxEYW5tYWt1UHJvdG9QAaICA0REWKoCEURhbnVuaS5EYW5tYWt1LlYxygIRRGFudW5pXERhbm1ha3VcVjHiAh1EYW51bmlcRGFubWFrdVxWMVxHUEJNZXRhZGF0YeoCE0RhbnVuaTo6RGFubWFrdTo6VjFiBnByb3RvMw`,[ae]),2);let De=function(e){return e[e.NORMAL_UNSPECIFIED=0]=`NORMAL_UNSPECIFIED`,e[e.BOTTOM=1]=`BOTTOM`,e[e.TOP=2]=`TOP`,e[e.REVERSE=3]=`REVERSE`,e[e.EXT=4]=`EXT`,e}({}),Oe=function(e){return e[e.DEF_UNSPECIFIED=0]=`DEF_UNSPECIFIED`,e[e.SUB=1]=`SUB`,e[e.ADV=2]=`ADV`,e[e.IX=3]=`IX`,e}({});const ke=u.codec(u.enum(De),u.enum(r.mode.enumValues),{decode:e=>r.mode.enumValues[e]||`Normal`,encode:e=>{let t=r.mode.enumValues.indexOf(e);return t===-1?0:t}}),Ae=u.codec(u.enum(Oe),u.enum(r.pool.enumValues),{decode:e=>r.pool.enumValues[e]||`Def`,encode:e=>{let t=r.pool.enumValues.indexOf(e);return t===-1?0:t}}),j=J(e=>async(t,n)=>{let i=f(A,new Uint8Array(e)),a=n??await t.makeChunk({}),o=i.danmakus.some(e=>e.extraV1);return await a.upsertDanmakus(i.danmakus.map(e=>{let t={...e,SOID:e.soid,DMID:e.dmid,mode:ke.decode(e.mode),senderID:e.senderId,ctime:oe(e.ctime||ce()),pool:Ae.decode(e.pool),attr:u.enum(r.attr.enumValues).array().parse(e.attr),platform:e.platform??w.platform,extra:e.extra?p.parse(e.extra):e.extraV1?be(e.extraV1):void 0};return o?{...t,DMID:a.$UniDB.DMIDGenerator(t)}:t})),a}),je=Y(e=>e.then(e=>ue(A,le(A,{danmakus:e.map(e=>({...e,soid:e.SOID,dmid:e.DMID,mode:ke.encode(e.mode),senderId:e.senderID,ctime:se(e.ctime),pool:Ae.encode(e.pool),platform:e.platform??void 0,extra:p.stringify(e.extra)}))})))),Me=X({type:`danuni.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(j(n))}catch{return null}}}}),Ne=ie(`CiliaWxpYmlsaS9jb21tdW5pdHkvc2VydmljZS9kbS92MS9kbS5wcm90bxIgYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEiZAoGQXZhdGFyEgoKAmlkGAEgASgJEgsKA3VybBgCIAEoCRJBCgthdmF0YXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhclR5cGUiIwoGQnViYmxlEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJIsYBCghCdWJibGVWMhIMCgR0ZXh0GAEgASgJEgsKA3VybBgCIAEoCRJBCgtidWJibGVfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVR5cGUSFQoNZXhwb3N1cmVfb25jZRgEIAEoCBJFCg1leHBvc3VyZV90eXBlGAUgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIlsKBkJ1dHRvbhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlIlgKDkJ1enp3b3JkQ29uZmlnEkYKCGtleXdvcmRzGAEgAygLMjQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnV6endvcmRTaG93Q29uZmlnIngKEkJ1enp3b3JkU2hvd0NvbmZpZxIMCgRuYW1lGAEgASgJEg4KBnNjaGVtYRgCIAEoCRIOCgZzb3VyY2UYAyABKAUSCgoCaWQYBCABKAMSEwoLYnV6endvcmRfaWQYBSABKAMSEwoLc2NoZW1hX3R5cGUYBiABKAUiewoIQ2hlY2tCb3gSDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgSDAoEc2hvdxgEIAEoCCJvCgpDaGVja0JveFYyEgwKBHRleHQYASABKAkSPAoEdHlwZRgCIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrYm94VHlwZRIVCg1kZWZhdWx0X3ZhbHVlGAMgASgIIoICCgtDbGlja0J1dHRvbhIVCg1wb3J0cmFpdF90ZXh0GAEgAygJEhYKDmxhbmRzY2FwZV90ZXh0GAIgAygJEhsKE3BvcnRyYWl0X3RleHRfZm9jdXMYAyADKAkSHAoUbGFuZHNjYXBlX3RleHRfZm9jdXMYBCADKAkSQQoLcmVuZGVyX3R5cGUYBSABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEgwKBHNob3cYBiABKAgSOAoGYnViYmxlGAcgASgLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlIrMCCg1DbGlja0J1dHRvblYyEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSFwoPdGV4dF9pbnB1dF9wb3N0GAYgASgIEhUKDWV4cG9zdXJlX29uY2UYByABKAgSRQoNZXhwb3N1cmVfdHlwZRgIIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cG9zdXJlVHlwZSJLCgdDb21tYW5kEkAKC2NvbW1hbmRfZG1zGAEgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZERtIuYBCglDb21tYW5kRG0SCgoCaWQYASABKAMSCwoDb2lkGAIgASgDEgsKA21pZBgDIAEoAxIPCgdjb21tYW5kGAQgASgJEg8KB2NvbnRlbnQYBSABKAkSEAoIcHJvZ3Jlc3MYBiABKAUSDQoFY3RpbWUYByABKAkSDQoFbXRpbWUYCCABKAkSDQoFZXh0cmEYCSABKAkSDQoFaWRTdHIYCiABKAkSDAoEdHlwZRgLIAEoBRITCgthdXRvX2NyZWF0ZRgMIAEoCBISCgpjb3VudF9kb3duGA0gASgFEgwKBGF0dHIYDiABKAUiUAoNRGFubWFrdUFJRmxhZxI/CghkbV9mbGFncxgBIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnIosDCgtEYW5tYWt1RWxlbRIKCgJpZBgBIAEoAxIQCghwcm9ncmVzcxgCIAEoBRIMCgRtb2RlGAMgASgFEhAKCGZvbnRzaXplGAQgASgFEj8KBWNvbG9yGAUgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSEAoIbWlkX2hhc2gYBiABKAkSDwoHY29udGVudBgHIAEoCRINCgVjdGltZRgIIAEoAxIOCgZ3ZWlnaHQYCSABKAUSDgoGYWN0aW9uGAogASgJEgwKBHBvb2wYCyABKAUSDgoGaWRfc3RyGAwgASgJEgwKBGF0dHIYDSABKAUSEQoJYW5pbWF0aW9uGBYgASgJEg0KBWV4dHJhGBcgASgJEkIKCGNvbG9yZnVsGBggASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1Db2xvcmZ1bFR5cGUSDAoEdHlwZRgZIAEoBRILCgNvaWQYGiABKAMiKQoLRGFubWFrdUZsYWcSDAoEZG1pZBgBIAEoAxIMCgRmbGFnGAIgASgFIksKEURhbm1ha3VGbGFnQ29uZmlnEhAKCHJlY19mbGFnGAEgASgFEhAKCHJlY190ZXh0GAIgASgJEhIKCnJlY19zd2l0Y2gYAyABKAUiiwcKGERhbm11RGVmYXVsdFBsYXllckNvbmZpZxIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYASABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X3N3aXRjaBgQIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV9zZW5pb3JfbW9kZV9zd2l0Y2gYESABKAUSLgomcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjIYEiABKAUSmAEKKnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyX21hcBgTIAMoCzJkLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11RGVmYXVsdFBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgUIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIuwJChFEYW5tdVBsYXllckNvbmZpZxIdChVwbGF5ZXJfZGFubWFrdV9zd2l0Y2gYASABKAgSIgoacGxheWVyX2Rhbm1ha3Vfc3dpdGNoX3NhdmUYAiABKAgSKQohcGxheWVyX2Rhbm1ha3VfdXNlX2RlZmF1bHRfY29uZmlnGAMgASgIEiwKJHBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX3N3aXRjaBgEIAEoCBIrCiNwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbBgFIAEoBRIfChdwbGF5ZXJfZGFubWFrdV9ibG9ja3RvcBgGIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3Njcm9sbBgHIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja2JvdHRvbRgIIAEoCBIkChxwbGF5ZXJfZGFubWFrdV9ibG9ja2NvbG9yZnVsGAkgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrcmVwZWF0GAogASgIEiMKG3BsYXllcl9kYW5tYWt1X2Jsb2Nrc3BlY2lhbBgLIAEoCBIeChZwbGF5ZXJfZGFubWFrdV9vcGFjaXR5GAwgASgCEiQKHHBsYXllcl9kYW5tYWt1X3NjYWxpbmdmYWN0b3IYDSABKAISHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCEhwKFHBsYXllcl9kYW5tYWt1X3NwZWVkGA8gASgFEiYKHnBsYXllcl9kYW5tYWt1X2VuYWJsZWJsb2NrbGlzdBgQIAEoCBIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBEgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9jb25maWcYEiABKAUSJgoecGxheWVyX2Rhbm1ha3VfaW9zX3N3aXRjaF9zYXZlGBMgASgFEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgUIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgVIAEoBRKRAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBYgAygLMl0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyTWFwRW50cnkSJQodcGxheWVyX2Rhbm1ha3VfZW5hYmxlX2hlcmRfZG0YFyABKAgSJgoecGxheWVyX2Rhbm1ha3VfYmxvY2t0b3BfYm90dG9tGBggASgIEiAKGHBsYXllcl9kYW5tYWt1X2RvbWFpbl92MhgZIAEoBRIeChZwbGF5ZXJfZGFubWFrdV9kZW5zaXR5GBogASgFEiUKHXBsYXllcl9kYW5tYWt1X3N1YnRpdGxlX3Byb29mGBsgASgIEiMKG3BsYXllcl9kYW5tYWt1X3Blb3BsZV9wcm9vZhgcIAEoCBpLCilQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIjAKFkRhbm11UGxheWVyQ29uZmlnUGFuZWwSFgoOc2VsZWN0aW9uX3RleHQYASABKAkiSwoYRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEhAKCHByb2dyZXNzGAEgASgFEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAiKQAwoVRGFubXVQbGF5ZXJWaWV3Q29uZmlnEmEKHWRhbm11a3VfZGVmYXVsdF9wbGF5ZXJfY29uZmlnGAEgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnElIKFWRhbm11a3VfcGxheWVyX2NvbmZpZxgCIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnEmEKHWRhbm11a3VfcGxheWVyX2R5bmFtaWNfY29uZmlnGAMgAygLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJEeW5hbWljQ29uZmlnEl0KG2Rhbm11a3VfcGxheWVyX2NvbmZpZ19wYW5lbBgEIAEoCzI4LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyQ29uZmlnUGFuZWwimQUKFERhbm11V2ViUGxheWVyQ29uZmlnEhEKCWRtX3N3aXRjaBgBIAEoCBIRCglhaV9zd2l0Y2gYAiABKAgSEAoIYWlfbGV2ZWwYAyABKAUSEAoIYmxvY2t0b3AYBCABKAgSEwoLYmxvY2tzY3JvbGwYBSABKAgSEwoLYmxvY2tib3R0b20YBiABKAgSEgoKYmxvY2tjb2xvchgHIAEoCBIUCgxibG9ja3NwZWNpYWwYCCABKAgSFAoMcHJldmVudHNoYWRlGAkgASgIEg0KBWRtYXNrGAogASgIEg8KB29wYWNpdHkYCyABKAISDgoGZG1hcmVhGAwgASgFEhEKCXNwZWVkcGx1cxgNIAEoAhIQCghmb250c2l6ZRgOIAEoAhISCgpzY3JlZW5zeW5jGA8gASgIEhEKCXNwZWVkc3luYxgQIAEoCBISCgpmb250ZmFtaWx5GBEgASgJEgwKBGJvbGQYEiABKAgSEgoKZm9udGJvcmRlchgTIAEoBRIRCglkcmF3X3R5cGUYFCABKAkSGgoSc2VuaW9yX21vZGVfc3dpdGNoGBUgASgFEhMKC2FpX2xldmVsX3YyGBYgASgFEmEKD2FpX2xldmVsX3YyX21hcBgXIAMoCzJILmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnLkFpTGV2ZWxWMk1hcEVudHJ5EhcKD2Jsb2NrdG9wX2JvdHRvbRgYIAEoCBISCgpkbV9hcmVhX3YyGBkgASgFEhIKCmRtX2RlbnNpdHkYGiABKAUaMwoRQWlMZXZlbFYyTWFwRW50cnkSCwoDa2V5GAEgASgFEg0KBXZhbHVlGAIgASgFOgI4ASJZCgpEbUNvbG9yZnVsEj4KBHR5cGUYASABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRILCgNzcmMYAiABKAkiUAoPRG1FeHBvUmVwb3J0UmVxEhIKCnNlc3Npb25faWQYASABKAkSCwoDb2lkGAIgASgDEg0KBWRtaWRzGAMgASgMEg0KBXNwbWlkGAQgASgJIhEKD0RtRXhwb1JlcG9ydFJlcyJtCgpEbUhlcmRWaWV3EhsKE2Rpc3BsYXlfaGVyZF9kbV9udW0YASABKAUSQgoIaGVyZF9kbXMYAiADKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWV3SGVyZERtRWxlbSKWAgoKRG1NYXNrV2FsbBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSDwoHY29udGVudBgDIAEoCRJNCgxjb250ZW50X3R5cGUYBCABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSRQoIYml6X3R5cGUYBSABKA4yMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQml6VHlwZRJFCghjb250ZW50cxgGIAMoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50ImsKEURtTWFza1dhbGxDb250ZW50EkUKBHR5cGUYASABKA4yNy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbU1hc2tXYWxsQ29udGVudFR5cGUSDwoHY29udGVudBgCIAEoCSLNEAoRRG1QbGF5ZXJDb25maWdSZXESCgoCdHMYASABKAMSRQoGc3dpdGNoGAIgASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaBJOCgtzd2l0Y2hfc2F2ZRgDIAEoCzI5LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTd2l0Y2hTYXZlElsKEnVzZV9kZWZhdWx0X2NvbmZpZxgEIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEmEKFWFpX3JlY29tbWVuZGVkX3N3aXRjaBgFIAEoCzJCLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkU3dpdGNoEl8KFGFpX3JlY29tbWVuZGVkX2xldmVsGAYgASgLMkEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBJJCghibG9ja3RvcBgHIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3RvcBJPCgtibG9ja3Njcm9sbBgIIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBJPCgtibG9ja2JvdHRvbRgJIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja2JvdHRvbRJTCg1ibG9ja2NvbG9yZnVsGAogASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSTwoLYmxvY2tyZXBlYXQYCyABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tyZXBlYXQSUQoMYmxvY2tzcGVjaWFsGAwgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBJHCgdvcGFjaXR5GA0gASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdU9wYWNpdHkSUwoNc2NhbGluZ2ZhY3RvchgOIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTY2FsaW5nZmFjdG9yEkUKBmRvbWFpbhgPIAEoCzI1LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW4SQwoFc3BlZWQYECABKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3BlZWQSVwoPZW5hYmxlYmxvY2tsaXN0GBEgASgLMj4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBJeChlpbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoGBIgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBJbChJzZW5pb3JfbW9kZV9zd2l0Y2gYEyABKAsyPy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBJkChdhaV9yZWNvbW1lbmRlZF9sZXZlbF92MhgUIAEoCzJDLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhJTCg5lbmFibGVfaGVyZF9kbRgVIAEoCzI7LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SVgoPYmxvY2t0b3BfYm90dG9tGBYgASgLMj0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEkoKCWRvbWFpbl92MhgXIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VEb21haW5WMhJHCgdkZW5zaXR5GBggASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURlbnNpdHkSVAoOc3VidGl0bGVfcHJvb2YYGSABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3VidGl0bGVQcm9vZhJQCgxwZW9wbGVfcHJvb2YYGiABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YiLwoLRG1TZWdDb25maWcSEQoJcGFnZV9zaXplGAEgASgDEg0KBXRvdGFsGAIgASgDIpECChBEbVNlZ01vYmlsZVJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUSQAoHYWlfZmxhZxgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VBSUZsYWcSFQoNc2VnbWVudF9ydWxlcxgEIAMoAxJCCgxjb2xvcmZ1bF9zcmMYBSADKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsEhMKC2NvbnRleHRfc3JjGAYgASgJIsoBCg5EbVNlZ01vYmlsZVJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAxIWCg50ZWVuYWdlcnNfbW9kZRgFIAEoBRIKCgJwcxgGIAEoAxIKCgJwZRgHIAEoAxIRCglwdWxsX21vZGUYCCABKAUSEgoKZnJvbV9zY2VuZRgJIAEoBRINCgVzcG1pZBgKIAEoCRITCgtjb250ZXh0X2V4dBgLIAEoCSJcCg1EbVNlZ090dFJlcGx5EjwKBWVsZW1zGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUVsZW0SDQoFc3RhdGUYAiABKAUiTAoLRG1TZWdPdHRSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEhUKDXNlZ21lbnRfaW5kZXgYBCABKAMiXQoNRG1TZWdTREtSZXBseRIOCgZjbG9zZWQYASABKAgSPAoFZWxlbXMYAiADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbSJMCgtEbVNlZ1NES1JlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJ3CglEbVN1YlZpZXcSDAoEdHlwZRgBIAEoBRILCgNvaWQYAiABKAMSCwoDcGlkGAMgASgDEkIKC3Bvc3RfcGFuZWwyGAQgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjIioQkKC0RtVmlld1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI5CgRtYXNrGAIgASgLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9NYXNrEkEKCHN1YnRpdGxlGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVmlkZW9TdWJ0aXRsZRITCgtzcGVjaWFsX2RtcxgEIAMoCRJECgdhaV9mbGFnGAUgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWdDb25maWcSTgoNcGxheWVyX2NvbmZpZxgGIAEoCzI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11UGxheWVyVmlld0NvbmZpZxIWCg5zZW5kX2JveF9zdHlsZRgHIAEoBRINCgVhbGxvdxgIIAEoCBIRCgljaGVja19ib3gYCSABKAgSGgoSY2hlY2tfYm94X3Nob3dfbXNnGAogASgJEhgKEHRleHRfcGxhY2Vob2xkZXIYCyABKAkSGQoRaW5wdXRfcGxhY2Vob2xkZXIYDCABKAkSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GA0gAygJEkEKC2V4cG9fcmVwb3J0GA4gASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb1JlcG9ydBJJCg9idXp6d29yZF9jb25maWcYDyABKAsyMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZENvbmZpZxJCCgtleHByZXNzaW9ucxgQIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYESADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgSIAMoCRJCCgtwb3N0X3BhbmVsMhgTIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEkIKDGRtX21hc2tfd2FsbBgUIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGwSPQoHZG1faGVyZBgVIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtSGVyZFZpZXcSOgoHY29tbWFuZBgWIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmQSCgoCa3YYFyABKAkSPgoJc3ViX3ZpZXdzGBggAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgZIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8ibQoJRG1WaWV3UmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRINCgVzcG1pZBgEIAEoCRIUCgxpc19oYXJkX2Jvb3QYBSABKAUSEwoLY29udGV4dF9leHQYBiABKAkigQYKDkRtV2ViVmlld1JlcGx5Eg0KBXN0YXRlGAEgASgFEgwKBHRleHQYAiABKAkSEQoJdGV4dF9zaWRlGAMgASgJEj0KBmRtX3NnZRgEIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnQ29uZmlnEkEKBGZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxITCgtzcGVjaWFsX2RtcxgGIAMoCRIRCgljaGVja19ib3gYByABKAgSDQoFY291bnQYCCABKAMSQAoLY29tbWFuZF9kbXMYCSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0STQoNcGxheWVyX2NvbmZpZxgKIAEoCzI2LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm11V2ViUGxheWVyQ29uZmlnEh0KFXJlcG9ydF9maWx0ZXJfY29udGVudBgLIAMoCRJCCgtleHByZXNzaW9ucxgMIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb25zEj8KCnBvc3RfcGFuZWwYDSADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWwSFQoNYWN0aXZpdHlfbWV0YRgOIAMoCRJCCgtwb3N0X3BhbmVsMhgPIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbFYyEj4KCXN1Yl92aWV3cxgQIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU3ViVmlldxI2CgNxb2UYESABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Rb2VJbmZvIioKCkV4cG9SZXBvcnQSHAoUc2hvdWxkX3JlcG9ydF9hdF9lbmQYASABKAgiZAoKRXhwcmVzc2lvbhIPCgdrZXl3b3JkGAEgAygJEgsKA3VybBgCIAEoCRI4CgZwZXJpb2QYAyADKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QZXJpb2QiSQoLRXhwcmVzc2lvbnMSOgoEZGF0YRgBIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkV4cHJlc3Npb24iKgoZSW5saW5lUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCCInCgVMYWJlbBINCgV0aXRsZRgBIAEoCRIPCgdjb250ZW50GAIgAygJIocBCgdMYWJlbFYyEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkSFQoNZXhwb3N1cmVfb25jZRgDIAEoCBJFCg1leHBvc3VyZV90eXBlGAQgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIiQKBlBlcmlvZBINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMiMAofUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbBINCgV2YWx1ZRgBIAEoBSIyCiFQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjISDQoFdmFsdWUYASABKAUiMQogUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrYm90dG9tEg0KBXZhbHVlGAEgASgIIisKGlBsYXllckRhbm1ha3VCbG9ja2NvbG9yZnVsEg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tzY3JvbGwSDQoFdmFsdWUYASABKAgiKgoZUGxheWVyRGFubWFrdUJsb2Nrc3BlY2lhbBINCgV2YWx1ZRgBIAEoCCImChVQbGF5ZXJEYW5tYWt1QmxvY2t0b3ASDQoFdmFsdWUYASABKAgiLAobUGxheWVyRGFubWFrdUJsb2NrdG9wQm90dG9tEg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VEZW5zaXR5Eg0KBXZhbHVlGAEgASgFIiQKE1BsYXllckRhbm1ha3VEb21haW4SDQoFdmFsdWUYASABKAIiJgoVUGxheWVyRGFubWFrdURvbWFpblYyEg0KBXZhbHVlGAEgASgFIioKGVBsYXllckRhbm1ha3VFbmFibGVIZXJkRG0SDQoFdmFsdWUYASABKAgiLQocUGxheWVyRGFubWFrdUVuYWJsZWJsb2NrbGlzdBINCgV2YWx1ZRgBIAEoCCIlChRQbGF5ZXJEYW5tYWt1T3BhY2l0eRINCgV2YWx1ZRgBIAEoAiIpChhQbGF5ZXJEYW5tYWt1UGVvcGxlUHJvb2YSDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISDQoFdmFsdWUYASABKAIiLgodUGxheWVyRGFubWFrdVNlbmlvck1vZGVTd2l0Y2gSDQoFdmFsdWUYASABKAUiIwoSUGxheWVyRGFubWFrdVNwZWVkEg0KBXZhbHVlGAEgASgFIisKGlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mEg0KBXZhbHVlGAEgASgIIjgKE1BsYXllckRhbm1ha3VTd2l0Y2gSDQoFdmFsdWUYASABKAgSEgoKY2FuX2lnbm9yZRgCIAEoCCIoChdQbGF5ZXJEYW5tYWt1U3dpdGNoU2F2ZRINCgV2YWx1ZRgBIAEoCCIuCh1QbGF5ZXJEYW5tYWt1VXNlRGVmYXVsdENvbmZpZxINCgV2YWx1ZRgBIAEoCCKMAwoJUG9zdFBhbmVsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIQCghwcmlvcml0eRgDIAEoAxIOCgZiaXpfaWQYBCABKAMSRAoIYml6X3R5cGUYBSABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkMKDGNsaWNrX2J1dHRvbhgGIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uEj8KCnRleHRfaW5wdXQYByABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXQSPQoJY2hlY2tfYm94GAggASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tCb3gSNgoFdG9hc3QYCSABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdCKtBAoLUG9zdFBhbmVsVjISDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEkQKCGJpel90eXBlGAMgASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsQml6VHlwZRJFCgxjbGlja19idXR0b24YBCABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DbGlja0J1dHRvblYyEkEKCnRleHRfaW5wdXQYBSABKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5UZXh0SW5wdXRWMhI/CgljaGVja19ib3gYBiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveFYyEjgKBXRvYXN0GAcgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RWMhI6CgZidWJibGUYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGVWMhI4CgVsYWJlbBgJIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsVjISQQoLcG9zdF9zdGF0dXMYCiABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0U3RhdHVzIhcKB1FvZUluZm8SDAoEaW5mbxgBIAEoCSIpCghSZXNwb25zZRIMCgRjb2RlGAEgASgFEg8KB21lc3NhZ2UYAiABKAki+QIKDFN1YnRpdGxlSXRlbRIKCgJpZBgBIAEoAxIOCgZpZF9zdHIYAiABKAkSCwoDbGFuGAMgASgJEg8KB2xhbl9kb2MYBCABKAkSFAoMc3VidGl0bGVfdXJsGAUgASgJEjoKBmF1dGhvchgGIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlVzZXJJbmZvEjwKBHR5cGUYByABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZVR5cGUSFQoNbGFuX2RvY19icmllZhgIIAEoCRJBCgdhaV90eXBlGAkgASgOMjAuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVR5cGUSRQoJYWlfc3RhdHVzGAogASgOMjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuU3VidGl0bGVBaVN0YXR1cyLoAgoJVGV4dElucHV0EhwKFHBvcnRyYWl0X3BsYWNlaG9sZGVyGAEgAygJEh0KFWxhbmRzY2FwZV9wbGFjZWhvbGRlchgCIAMoCRJBCgtyZW5kZXJfdHlwZRgDIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSGAoQcGxhY2Vob2xkZXJfcG9zdBgEIAEoCBIMCgRzaG93GAUgASgIEjgKBmF2YXRhchgGIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchJBCgtwb3N0X3N0YXR1cxgHIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMSNgoFbGFiZWwYCCABKAsyJy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5MYWJlbCL7AQoLVGV4dElucHV0VjISHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEjgKBmF2YXRhchgFIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkF2YXRhchIYChB0ZXh0X2lucHV0X2xpbWl0GAYgASgFIm8KBVRvYXN0EgwKBHRleHQYASABKAkSEAoIZHVyYXRpb24YAiABKAUSDAoEc2hvdxgDIAEoCBI4CgZidXR0b24YBCABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXR0b24iYgoNVG9hc3RCdXR0b25WMhIMCgR0ZXh0GAEgASgJEkMKBmFjdGlvbhgCIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0RnVuY3Rpb25UeXBlInMKB1RvYXN0VjISDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRJICg90b2FzdF9idXR0b25fdjIYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdEJ1dHRvblYyIlwKCFVzZXJJbmZvEgsKA21pZBgBIAEoAxIMCgRuYW1lGAIgASgJEgsKA3NleBgDIAEoCRIMCgRmYWNlGAQgASgJEgwKBHNpZ24YBSABKAkSDAoEcmFuaxgGIAEoBSJTCglWaWRlb01hc2sSCwoDY2lkGAEgASgDEgwKBHBsYXQYAiABKAUSCwoDZnBzGAMgASgFEgwKBHRpbWUYBCABKAMSEAoIbWFza191cmwYBSABKAkicAoNVmlkZW9TdWJ0aXRsZRILCgNsYW4YASABKAkSDwoHbGFuX2RvYxgCIAEoCRJBCglzdWJ0aXRsZXMYAyADKAsyLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUl0ZW0ikgEKDlZpZXdIZXJkRG1FbGVtEhAKCGhlcmRfbXNnGAEgASgJEhYKDmhlcmRfc3RhcnRfY250GAIgASgFEhQKDGhlcmRfZW5kX2NudBgDIAEoBRISCgpyZWdleF9ydWxlGAQgASgJEhYKDnN0YXJ0X3Byb2dyZXNzGAUgASgFEhQKDGVuZF9wcm9ncmVzcxgGIAEoBSozCgpBdmF0YXJUeXBlEhIKDkF2YXRhclR5cGVOb25lEAASEQoNQXZhdGFyVHlwZU5GVBABKlkKCkJ1YmJsZVR5cGUSEgoOQnViYmxlVHlwZU5vbmUQABIZChVCdWJibGVUeXBlQ2xpY2tCdXR0b24QARIcChhCdWJibGVUeXBlRG1TZXR0aW5nUGFuZWwQAipYCgxDaGVja2JveFR5cGUSFAoQQ2hlY2tib3hUeXBlTm9uZRAAEhkKFUNoZWNrYm94VHlwZUVuY291cmFnZRABEhcKE0NoZWNrYm94VHlwZUNvbG9yRE0QAio1Cg5EbUNvbG9yZnVsVHlwZRIMCghOb25lVHlwZRAAEhUKD1ZpcEdyYWR1YWxDb2xvchDh1AMqYAoRRG1NYXNrV2FsbEJpelR5cGUSCwoHVW5rbm93bhAAEgcKA09HVhABEgoKBkJpelBpYxACEggKBE11dGUQAxIKCgZSZWNvcmQQBBIJCgVDbG91ZBAFEggKBEFJR0MQBip2ChVEbU1hc2tXYWxsQ29udGVudFR5cGUSIAocRG1NYXNrV2FsbENvbnRlbnRUeXBlVW5rbm93bhAAEh0KGURtTWFza1dhbGxDb250ZW50VHlwZVRleHQQARIcChhEbU1hc2tXYWxsQ29udGVudFR5cGVQaWMQAio8CgxFeHBvc3VyZVR5cGUSFAoQRXhwb3N1cmVUeXBlTm9uZRAAEhYKEkV4cG9zdXJlVHlwZURNU2VuZBABKoMCChBQb3N0UGFuZWxCaXpUeXBlEhgKFFBvc3RQYW5lbEJpelR5cGVOb25lEAASHQoZUG9zdFBhbmVsQml6VHlwZUVuY291cmFnZRABEhsKF1Bvc3RQYW5lbEJpelR5cGVDb2xvckRNEAISGQoVUG9zdFBhbmVsQml6VHlwZU5GVERNEAMSHQoZUG9zdFBhbmVsQml6VHlwZUZyYWdDbG9zZRAEEh0KGVBvc3RQYW5lbEJpelR5cGVSZWNvbW1lbmQQBRIcChhQb3N0UGFuZWxCaXpUeXBlUGxvdExlYWsQBhIiCh5Qb3N0UGFuZWxCaXpUeXBlQW50aUhhcmFzc21lbnQQByo4CgpQb3N0U3RhdHVzEhQKEFBvc3RTdGF0dXNOb3JtYWwQABIUChBQb3N0U3RhdHVzQ2xvc2VkEAEqTgoKUmVuZGVyVHlwZRISCg5SZW5kZXJUeXBlTm9uZRAAEhQKEFJlbmRlclR5cGVTaW5nbGUQARIWChJSZW5kZXJUeXBlUm90YXRpb24QAio2ChBTdWJ0aXRsZUFpU3RhdHVzEggKBE5vbmUQABIMCghFeHBvc3VyZRABEgoKBkFzc2lzdBACKisKDlN1YnRpdGxlQWlUeXBlEgoKBk5vcm1hbBAAEg0KCVRyYW5zbGF0ZRABKh4KDFN1YnRpdGxlVHlwZRIGCgJDQxAAEgYKAkFJEAEqTgoRVG9hc3RGdW5jdGlvblR5cGUSGQoVVG9hc3RGdW5jdGlvblR5cGVOb25lEAASHgoaVG9hc3RGdW5jdGlvblR5cGVQb3N0UGFuZWwQATKgBQoCRE0ScwoLRG1TZWdNb2JpbGUSMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ01vYmlsZVJlcRoyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVwbHkSZAoGRG1WaWV3EisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVxGi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1WaWV3UmVwbHkScQoORG1QbGF5ZXJDb25maWcSMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVBsYXllckNvbmZpZ1JlcRoqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlc3BvbnNlEmoKCERtU2VnT3R0Ei0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdPdHRSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcGx5EmoKCERtU2VnU0RLEi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdTREtSZXEaLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcGx5EnQKDERtRXhwb1JlcG9ydBIxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlcRoxLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtRXhwb1JlcG9ydFJlc0LUAQokY29tLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxQgdEbVByb3RvUAGiAgRCQ1NEqgIgQmlsaWJpbGkuQ29tbXVuaXR5LlNlcnZpY2UuRG0uVjHKAiBCaWxpYmlsaVxDb21tdW5pdHlcU2VydmljZVxEbVxWMeICLEJpbGliaWxpXENvbW11bml0eVxTZXJ2aWNlXERtXFYxXEdQQk1ldGFkYXRh6gIkQmlsaWJpbGk6OkNvbW11bml0eTo6U2VydmljZTo6RG06OlYxYgZwcm90bzM`),Pe=d(Ne,30),Fe=d(Ne,39),M=J(e=>async(t,n)=>{let r=n??await t.makeChunk({}),i=f(Fe,new Uint8Array(e)).commandDms;return await r.upsertDanmakus(i.map(e=>{let t=`def_bili+${b.fromBili({cid:e.oid}).toString()}`,n=b.fromBili({mid:e.mid}),i={SOID:t,progress:e.progress,mode:`Ext`,fontsize:w.fontsize,color:w.color,senderID:n.toString(),content:e.content,ctime:new Date(`${e.ctime} GMT+0800`),weight:11,pool:`Adv`,attr:[`Protect`],platform:`bili`,extra:{bili:{dmid:e.idStr,attr:e.attr,mid:e.mid?.toString(),command:e}}};return{...i,DMID:r.$UniDB.DMIDGenerator(i)}})),r}),Ie=X({type:`bili.cmd.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(M(n))}catch{return null}}}});function Le(e,t){return t===`ms`?!0:t===`s`?!1:e<1e8}function N(e,t){return typeof e==`number`||typeof e==`bigint`?Le(e,t)?new Date(Number(e)):new Date(Number(e)*1e3):typeof e==`string`?/^\d+n$/.test(e)?N(Number(e.slice(0,-1)),t):N(Number(e),t):e}const Re=e=>{let t=[];do t.unshift(!!(e&1)),e>>=1;while(e);return t.toReversed()};var ze=class{bin;constructor(e){this.bin=e}set1(e){this.bin|=1<<e}set0(e){this.bin&=~(1<<e)}};const Be={fromBin(e=0,t){let n=Re(e),r=[];return t===`bili`&&(n[0]&&r.push(`Protect`),n[1]&&r.push(`FromLive`),n[2]&&r.push(`HighLike`)),r},toBin(e=[],t){let n=new ze(0);return t===`bili`&&(e.includes(`Protect`)&&n.set1(0),e.includes(`FromLive`)&&n.set1(1),e.includes(`HighLike`)&&n.set1(2)),n.bin}};function P(e,t,n,r){t.oid&&!n&&(n=t.oid);let i=r||`def_bili+${b.fromBili({cid:n}).toString()}`,a=b.validateString(t.midHash)?t.midHash:b.fromBili({midHash:t.midHash}).toString(),o,s=D.in.safeParse(t.pool).success?t.pool:0,c={bili:{mode:t.mode,pool:t.pool,dmid:t.idStr??t.id.toString(),attr:t.attr,mid:t.mid?.toString(),adv:void 0,code:void 0,bas:void 0}};switch(t.mode){case 4:o=1;break;case 5:o=2;break;case 6:o=3;break;case 7:o=4,c.bili.adv=t.content;break;case 8:o=4,c.bili.code=t.content;break;case 9:o=4,c.bili.bas=t.content;break;default:o=0;break}let l={...t,SOID:i,mode:o,senderID:a,ctime:N(t.ctime,`s`),weight:t.weight||+(s===3),pool:s,attr:Be.fromBin(t.attr,`bili`),platform:`bili`,extra:c};return{...l,mode:E.decode(o),pool:D.decode(s),DMID:e.$UniDB.DMIDGenerator({...l,mode:E.decode(o),pool:D.decode(s)})}}const F=(e,t)=>{switch(e){case`Normal`:return 1;case`Bottom`:return 4;case`Top`:return 5;case`Reverse`:return 6;case`Ext`:return t?t.adv?7:t.code?8:t.bas?9:1:1;default:return 1}};function I(e,t,n){if(n?.skipBiliCommand&&t.extra?.bili?.command)return null;let r=t.extra?.bili?.mode||F(t.mode,t.extra?.bili),i;switch(r){case 7:i=t.extra?.bili?.adv;break;case 8:i=t.extra?.bili?.code;break;case 9:i=t.extra?.bili?.bas;break;default:i=t.content;break}return{"#text":i??t.content,"@_p":[t.progress/1e3,r,t.fontsize,t.color,t.ctime.getTime()/1e3,t.extra?.bili?.pool||t.pool,n?.avoidSenderIDWithAt?t.senderID.replaceAll(`@bili`,``):t.senderID,t.extra?.bili?.dmid||t.DMID||e(t),t.weight].join(`,`)}}const L=J(e=>async(t,n)=>{let r=n??await t.makeChunk({}),i=f(Pe,new Uint8Array(e)).elems;return await r.upsertDanmakus(i.map(e=>P(r,e))),r}),Ve=X({type:`bili.binpb`,ext:[`.binpb`,`.bin`,`.pb.bin`,`.so`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))return null;try{let n;if(t instanceof ArrayBuffer)n=new Uint8Array(t);else if(ArrayBuffer.isView(t)){let e=t;n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}else return null;return e.import(L(n))}catch{return null}}}}),R=J(e=>async(t,n)=>{let r=n??await t.makeChunk({});return await r.upsertDanmakus(e.data.result.map(e=>{let t=e.attrs?e.attrs.split(`,`).map(Number).reduce((e,t)=>e|1<<t-1,0):0;return P(r,{id:BigInt(e.id_str||e.id),idStr:e.id_str,progress:e.progress,mode:e.mode,fontsize:e.fontsize,color:Number.parseInt(e.color,16),mid:e.mid,midHash:e.mid_hash,content:e.msg,ctime:BigInt(e.ctime),pool:e.pool,attr:t,oid:BigInt(e.oid)})})),r}),He=X({type:`bili.up.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(!(typeof t==`object`||typeof t==`string`)||!t)return null;try{return e.import(R(p.parse(p.stringify(t))))}catch{return null}}}}),Ue=new de({ignoreAttributes:!1,parseTagValue:!1,parseAttributeValue:!1,trimValues:!1,isArray:(e,t,n,r)=>t===`i.d`}),We=new fe({ignoreAttributes:!1});function Ge(e,t){let n=e.split(`,`);return{content:t,progress:~~(Number.parseFloat(n[0])*1e3),mode:Number.parseInt(n[1]),fontsize:Number.parseInt(n[2]),color:Number.parseInt(n[3]),ctime:BigInt(n[4]),pool:Number.parseInt(n[5]),midHash:n[6],id:BigInt(n[7]),idStr:n[7],weight:Number.parseInt(n[8])}}const z=J(e=>async(t,n)=>{let r=Ue.parse(e),i=r.i.d,a=!!r.i.danuni,o=BigInt(r.i.chatid),s=a?r.i.danuni?.data:void 0,c=n??await t.makeChunk({fromConverted:a});return await c.upsertDanmakus(i.map(e=>P(c,Ge(e[`@_p`],e[`#text`]),o,s))),c}),Ke=(e,t)=>{if(e){let n=b.fromStringSafe(e);if(n.domain===`bili`){let e=n.id.replaceAll(`def_bili+`,``);if(e)return e}return t?.cid||e}else return t?.cid||b.fromNull().toString()},qe=e=>Y(async(t,n)=>{let r=await t;if(e?.avoidSenderIDWithAt&&!r.every(e=>e.senderID.endsWith(`@bili`)))throw Error(`存在其他来源的senderID,请关闭该功能再试!`);let i=r.map(t=>I(n.DMIDGenerator,t,e));return e?.skipBiliCommand&&(i=i.filter(e=>e!==null)),We.build({"?xml":{"@_version":`1.0`,"@_encoding":`UTF-8`},i:{chatserver:`chat.bilibili.com`,chatid:Ke(r[0]?.SOID),mission:0,maxlimit:r.length,state:0,real_name:0,source:`k-v`,danuni:{...T,data:[...new Set(r.map(e=>e.SOID))][0]},d:i}})}),Je=X({type:`bili.xml`,ext:[`.xml`],check:{adapter:async(e,t)=>{if(typeof t!=`string`)return null;try{return e.import(z(t))}catch{return null}}}});function B(e,t){let n=`Normal`;switch(t){case`bili`:switch(e){case 4:n=`Bottom`;break;case 5:n=`Top`;break;case 6:n=`Reverse`;break;case 7:n=`Ext`;break;case 8:n=`Ext`;break;case 9:n=`Ext`;break}break;case`dplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`artplayer`:e===1?n=`Top`:e===2&&(n=`Bottom`);break;case`ddplay`:n=B(e,`bili`);break;case`vod`:e===`top`?n=`Top`:e===`bottom`&&(n=`Bottom`);break;default:n=`Normal`;break}return n}const V=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=b.fromNull(n).toString(),c=new Date;return await a.upsertDanmakus(e.danmuku.map(e=>{let t=e.border?{artplayer:{border:e.border,style:{}}}:null;e.style&&(t=t?{...t,artplayer:{...t.artplayer,border:e.border,style:e.style}}:{artplayer:{border:e.border,style:e.style}});let r=B(e.mode??0,`artplayer`),i={attr:w.attr,fontsize:w.fontsize,ctime:c,weight:w.weight,pool:`Def`,content:e.text,progress:(e.time??0)*1e3,mode:r,color:Number((e.color||`FFFFFF`).replace(`#`,`0x`)),style:e.style,SOID:o,senderID:s,platform:n,extra:t};return{...i,DMID:a.$UniDB.DMIDGenerator(i)}})),a}),Ye=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},danmuku:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),{text:e.content,time:e.progress/1e3,mode:t,color:`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,border:e.extra?.artplayer?.border,style:e.extra?.artplayer?.style}})}))),Xe=X({type:`artplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(V(t)),V}catch{return null}}}}),H=J((e,t=`0`,n=`ddplay`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=b.fromUnknown(`def_ddplay+${t}`,n).toString(),s=new Date;return await a.upsertDanmakus(e.comments.map(e=>{let t=e.p.split(`,`),r=t[3],i=b.fromUnknown(r,n).toString(),c=B(Number.parseInt(t[1]),`ddplay`),l={SOID:o,color:Number.parseInt(t[2]),progress:Number.parseFloat(t[0])*1e3,mode:c,senderID:i,content:e.m,platform:n,extra:{ddplay:{cid:e.cid,uid:r}},attr:w.attr,fontsize:w.fontsize,ctime:s,weight:w.weight,pool:`Def`};return{...l,DMID:a.$UniDB.DMIDGenerator(l)}})),a}),Ze=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0].replaceAll(`def_ddplay+`,``)},count:e.length,comments:e.map(e=>{let t=1;return e.mode===`Top`?t=5:e.mode===`Bottom`&&(t=4),{cid:e.extra?.ddplay?.cid??Number.parseInt(`0x${Buffer.from(e.DMID).toString(`hex`)}`)??0,p:`${e.progress/1e3},${t},${e.color},${e.extra?.ddplay?.uid??e.senderID}`,m:e.content}})}))),Qe=X({type:`ddplay.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(H(t)),H}catch{return null}}}}),U=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!!e.danuni}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=new Date;return await a.upsertDanmakus(e.data.map(([e,t,r,i,c])=>{let l=B(t,`dplayer`),u={attr:w.attr,fontsize:w.fontsize,ctime:s,weight:w.weight,extra:w.extra,pool:`Def`,progress:e*1e3,mode:l,color:r,midHash:i,content:c,SOID:o,senderID:b.fromUnknown(i,n).toString(),platform:n};return{...u,DMID:a.$UniDB.DMIDGenerator(u)}})),a}),$e=Y(e=>e.then(e=>({code:0,danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},data:e.map(e=>{let t=0;return e.mode===`Top`?t=1:e.mode===`Bottom`&&(t=2),[e.progress/1e3,t,e.color,e.senderID,e.content]})}))),et=X({type:`dplayer.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(U(t)),U}catch{return null}}}});function tt(e){return e===2?`Top`:e===3?`Bottom`:`Normal`}const nt=u.object({color:u.string(),gradient_colors:u.tuple([u.string(),u.string()]),position:u.number()}),rt=u.string().transform(e=>{try{let t=JSON.parse(e);return nt.parse(t)}catch{return}}).transform(e=>{let t=e?.gradient_colors[0]??e?.color??`ffffff`;return{color:Number(`#${t}`.replace(`#`,`0x`)),mode:tt(e?.position)}}),W=`tencent`,G=J((e,t)=>async(n,r)=>{let i=r??await n.makeChunk({fromConverted:!1}),a=t?b.fromUnknown(t,W).toString():b.fromNull(W).toString(),o=b.fromNull(W).toString(),s=Array.isArray(e?.barrage_list)?e.barrage_list:[];return await i.upsertDanmakus(s.map(e=>{let t=rt.parse(e.content_style),n={...e};delete n.content,delete n.time_offset,delete n.create_time;let r={attr:w.attr,fontsize:w.fontsize,ctime:N(e.create_time,`s`),weight:e.show_weight??w.weight,pool:`Def`,content:e.content,progress:Number.parseInt(e.time_offset)||0,mode:t.mode,color:t.color,SOID:a,senderID:o,platform:W,extra:{tencent:n}};return{...r,DMID:i.$UniDB.DMIDGenerator(r)}})),i}),it=X({type:`tencent.json`,ext:[`.json`],check:{adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(G(t)),G}catch{return null}}}}),K=u.object({code:u.number(),name:u.string(),danum:u.number(),danmuku:u.array(u.tuple([u.coerce.number().min(0),u.union([u.literal(`right`),u.literal(`top`),u.literal(`bottom`)]),u.string().toUpperCase().regex(/^#([0-9a-fA-F]{3}){1,2}$/,{error:`Invalid hex color format`}).transform(e=>e.length>6?e.toUpperCase():`#${e.split(`#`)[1].toUpperCase()}`),u.string().prefault(``),u.string(),u.string().prefault(``).optional(),u.string().prefault(``).optional(),u.string().regex(/^\d+px$/).optional()]).rest(u.any()))}),q=J((e,t,n=`other`)=>async(r,i)=>{let a=i??await r.makeChunk({fromConverted:!1}),o=t?b.fromUnknown(t,n).toString():b.fromNull(n).toString(),s=b.fromNull(n).toString(),c=new Date;return await a.upsertDanmakus(e.danmuku.slice(-e.danum).map(e=>{let t={...w,pool:`Def`,ctime:c,SOID:o,senderID:s,progress:~~(e[0]*1e3),mode:B(e[1],`vod`),color:Number((e[2]||`FFFFFF`).replace(`#`,`0x`)),content:e[4],fontsize:e[7]?Number(e[7].replace(`px`,``)):w.fontsize};return{...t,DMID:a.$UniDB.DMIDGenerator(t)}})),a}),at=Y(e=>e.then(e=>({danuni:{...T,data:e[0]?.SOID.split(`@`)[0]},code:0,name:e[0]?.SOID??`unknown`,danum:e.length,danmuku:e.map(e=>{let t=`right`;switch(e.mode){case`Top`:t=`top`;break;case`Bottom`:t=`bottom`;break}return[e.progress/1e3,t,`#${e.color.toString(16).toUpperCase()||`FFFFFF`}`,``,e.content,``,``,`${e.fontsize}px`]})}))),ot=X({type:`vod.json`,ext:[`.json`],check:{body:e=>K.safeParse(e).success?q:null,adapter:async(e,t)=>{if(typeof t!=`object`||!t)return null;try{return await e.import(q(t)),q}catch{return null}}}});var st=e({ArtplayerAdapter:()=>V,ArtplayerMetadata:()=>Xe,ArtplayerTransformer:()=>Ye,BiliCommandGrpcAdapter:()=>M,BiliCommandGrpcMetadata:()=>Ie,BiliCommonBuilder:()=>I,BiliCommonModeRec:()=>F,BiliCommonParser:()=>P,BiliGrpcAdapter:()=>L,BiliGrpcMetadata:()=>Ve,BiliUpAdapter:()=>R,BiliUpMetadata:()=>He,BiliXmlAdapter:()=>z,BiliXmlMetadata:()=>Je,BiliXmlTransformerConfigurator:()=>qe,DanuniJsonAdapter:()=>k,DanuniJsonMetadata:()=>Ee,DanuniJsonTransformerConfigurator:()=>Te,DanuniPbAdapter:()=>j,DanuniPbMetadata:()=>Me,DanuniPbTransformer:()=>je,DdplayAdapter:()=>H,DdplayMetadata:()=>Qe,DdplayTransformer:()=>Ze,DplayerAdapter:()=>U,DplayerMetadata:()=>et,DplayerTransformer:()=>$e,TencentAdapter:()=>G,TencentMetadata:()=>it,VodAdapter:()=>q,VodMetadata:()=>ot,VodTransformer:()=>at,VodZod:()=>K,defineAdapter:()=>J,defineMetadata:()=>X,definePlugin:()=>lt,defineTransformer:()=>Y,enumAttrsCodec:()=>O,enumModeCodec:()=>E,enumPoolCodec:()=>D,transformerInput2Danmakus:()=>ct});function ct(e){return e.$danmakus}function J(e){return e}function Y(e){return e}function lt(e){return e}function X(e){return e}const Z=(e,t=8)=>{let n=re([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,p.stringify(e.extra)].join(`|`));return ne(ee.create().update(n).digest()).slice(0,t)};function*ut(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 dt=e({DMAttr:()=>C,DanUniConvertTipTemplate:()=>T,InitedUniDB:()=>Q,Modes:()=>x,PlatformDanmakuOnlySource:()=>v,PlatformDanmakuOnlySources:()=>he,PlatformDanmakuSources:()=>y,PlatformInfoSource:()=>m,PlatformInfoSources:()=>h,PlatformSources:()=>ge,PlatformVideoSource:()=>g,PlatformVideoSources:()=>_,Pools:()=>S,UniChunk:()=>$,UniDB:()=>ft,createDMID:()=>Z,defaultUniDM:()=>w}),ft=class{$drizzle;DMIDGenerator;constructor(e=o,t=Z){this.$drizzle=e,this.DMIDGenerator=t}async init(e){return new Q(await a(e),this.DMIDGenerator)}async dump(){return await s(this.$drizzle)}async close(){this.$drizzle=null,await c()}},Q=class extends ft{$drizzle;DMIDGenerator;constructor(e,t=Z){super(e,t),this.$drizzle=e,this.DMIDGenerator=t}get $db(){return this.$drizzle}get $chunks(){return this.$db.query.chunks.findMany()}get $danmakus(){return this.$db.query.chunks.findFirst({with:{danmakus:!0}}).then(e=>e?.danmakus??[])}async listChunks(){return(await this.$chunks).map(e=>new $(this,e.id))}async makeChunk(e){return $.makeChunk(this,e)}async#e(e){e=e.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 t of ut(e,2340))await this.$db.insert(r).values(t).onConflictDoUpdate(i.danmakus)}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 this.#e([...t.values()])}else await this.#e(e)}async shrink(){let e=await this.$db.query.chunks.findMany({where:{tmp:!0}});for(let t of e)await new $(this,t.id).delete()}async import(e){return e(this)}export(e){return e(this.$danmakus,{DMIDGenerator:this.DMIDGenerator})}},$=class e{$UniDB;id;constructor(e,t){this.$UniDB=e,this.id=t}get $db(){return this.$UniDB.$drizzle}static async makeChunk(t,r){let i=await t.$db.insert(n).values(r).returning();return new e(t instanceof Q?t:t.$UniDB,i[0].id)}static async assign(t,r){if(r.length<1)return t;let i=t.$UniDB,a=i.$drizzle,o=t.id,s=(await t.$chunk()).fromConverted;for(let e of r){let n=await e.$chunk();s&&=!!n.fromConverted;let r=await e.$danmakus;await t.upsertDanmakus(r,!1),await e.delete()}return await a.update(n).set({fromConverted:s}).where(l(n.id,o)),new e(i,o)}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 ut([...i].map(e=>({chunkID:this.id,DMID:e})),2340))await this.$db.insert(t).values(e).onConflictDoNothing()}async import(e){return e(this.$UniDB,this)}async export(e){return e(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))})}};export{v as $,R as A,Me as B,Ze as C,z as D,Ye as E,L as F,O as G,k as H,Ve as I,C as J,E as K,M as L,I as M,F as N,Je as O,P,w as Q,Ie as R,Qe as S,Xe as T,Ee as U,je as V,Te as W,x as X,T as Y,S as Z,it as _,Z as a,g as at,$e as b,X as c,ct as d,he as et,q as f,G as g,K as h,dt as i,ge as it,He as j,qe as k,lt as l,at as m,$ as n,m as nt,st as o,_ as ot,ot as p,D as q,ft as r,h as rt,J as s,p as st,Q as t,y as tt,Y as u,U as v,V as w,H as x,et as y,j as z};
|
|
2
|
-
//# sourceMappingURL=core-BdTujEkj.mjs.map
|