@dan-uni/dan-any 1.4.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +87 -43
  2. package/dist/adapters.d.mts +2 -0
  3. package/dist/adapters.mjs +1 -0
  4. package/dist/chunk-0Lt9GpW0.mjs +1 -0
  5. package/dist/core/db/schema.d.mts +2 -0
  6. package/dist/core/db/schema.mjs +2 -0
  7. package/dist/core/db/schema.mjs.map +1 -0
  8. package/dist/core/db/utils.d.mts +1707 -0
  9. package/dist/core/db/utils.d.mts.map +1 -0
  10. package/dist/core/db/utils.mjs +1 -0
  11. package/dist/core-D7LMAB5h.mjs +2 -0
  12. package/dist/core-D7LMAB5h.mjs.map +1 -0
  13. package/dist/core.d.mts +2 -0
  14. package/dist/core.mjs +1 -0
  15. package/dist/db-DWWzkRBb.mjs +41 -0
  16. package/dist/db-DWWzkRBb.mjs.map +1 -0
  17. package/dist/dm-extra-DrAQCrFv.d.mts +135 -0
  18. package/dist/dm-extra-DrAQCrFv.d.mts.map +1 -0
  19. package/dist/dm-tkTdR_W6.mjs +2 -0
  20. package/dist/dm-tkTdR_W6.mjs.map +1 -0
  21. package/dist/index-vAs4qV9A.d.mts +6195 -0
  22. package/dist/index-vAs4qV9A.d.mts.map +1 -0
  23. package/dist/index.d.mts +4 -0
  24. package/dist/index.mjs +1 -0
  25. package/dist/isSame-D4G9eoE4.mjs +2 -0
  26. package/dist/isSame-D4G9eoE4.mjs.map +1 -0
  27. package/dist/plugins.d.mts +105 -0
  28. package/dist/plugins.d.mts.map +1 -0
  29. package/dist/plugins.mjs +2 -0
  30. package/dist/plugins.mjs.map +1 -0
  31. package/dist/schema-BuenbDx9.d.mts +1619 -0
  32. package/dist/schema-BuenbDx9.d.mts.map +1 -0
  33. package/dist/utils.d.mts +25 -0
  34. package/dist/utils.d.mts.map +1 -0
  35. package/dist/utils.mjs +2 -0
  36. package/dist/utils.mjs.map +1 -0
  37. package/package.json +65 -37
  38. package/.babelrc.json +0 -12
  39. package/buf.gen.yaml +0 -10
  40. package/buf.yaml +0 -12
  41. package/dist/browser/1~rslib-runtime.min.js +0 -49
  42. package/dist/browser/index.min.js +0 -13521
  43. package/dist/browser/index.min.js.LICENSE.txt +0 -17
  44. package/dist/browser/plugins/bili.min.js +0 -1
  45. package/dist/browser/plugins/index.min.js +0 -2
  46. package/dist/browser/plugins/stats.min.js +0 -10
  47. package/dist/browser/src/ass-gen/__tests__/canvas.test.d.ts +0 -1
  48. package/dist/browser/src/ass-gen/__tests__/generate.test.d.ts +0 -1
  49. package/dist/browser/src/ass-gen/ass/create.d.ts +0 -4
  50. package/dist/browser/src/ass-gen/ass/dialogue.d.ts +0 -16
  51. package/dist/browser/src/ass-gen/ass/event.d.ts +0 -2
  52. package/dist/browser/src/ass-gen/ass/info.d.ts +0 -8
  53. package/dist/browser/src/ass-gen/ass/raw.d.ts +0 -14
  54. package/dist/browser/src/ass-gen/ass/style.d.ts +0 -2
  55. package/dist/browser/src/ass-gen/config.d.ts +0 -2
  56. package/dist/browser/src/ass-gen/index.d.ts +0 -30
  57. package/dist/browser/src/ass-gen/types.d.ts +0 -71
  58. package/dist/browser/src/ass-gen/util/color.d.ts +0 -18
  59. package/dist/browser/src/ass-gen/util/danconvert.d.ts +0 -5
  60. package/dist/browser/src/ass-gen/util/index.d.ts +0 -4
  61. package/dist/browser/src/ass-gen/util/lang.d.ts +0 -3
  62. package/dist/browser/src/ass-gen/util/layout.d.ts +0 -4
  63. package/dist/browser/src/index.d.ts +0 -283
  64. package/dist/browser/src/index.test.d.ts +0 -1
  65. package/dist/browser/src/plugins/bili/dedupe.d.ts +0 -3
  66. package/dist/browser/src/plugins/bili/history-danmaku-fast-forward.d.ts +0 -18
  67. package/dist/browser/src/plugins/bili/index.d.ts +0 -2
  68. package/dist/browser/src/plugins/bili/index.test.d.ts +0 -1
  69. package/dist/browser/src/plugins/index.d.ts +0 -2
  70. package/dist/browser/src/plugins/stats/getLatestDan.d.ts +0 -6
  71. package/dist/browser/src/plugins/stats/index.d.ts +0 -1
  72. package/dist/browser/src/plugins/stats/index.test.d.ts +0 -1
  73. package/dist/browser/src/proto/gen/bilibili/community/service/dm/v1/dm_pb.d.ts +0 -3426
  74. package/dist/browser/src/proto/gen/danuni/danmaku/v1/danmaku_pb.d.ts +0 -176
  75. package/dist/browser/src/utils/dm-gen.d.ts +0 -309
  76. package/dist/browser/src/utils/dm-gen.test.d.ts +0 -1
  77. package/dist/browser/src/utils/fileParser.d.ts +0 -3
  78. package/dist/browser/src/utils/id-gen.d.ts +0 -50
  79. package/dist/browser/src/utils/platform.d.ts +0 -24
  80. package/dist/node/0~rslib-runtime.js +0 -23
  81. package/dist/node/index.js +0 -2097
  82. package/dist/node/plugins/bili.js +0 -1
  83. package/dist/node/plugins/index.js +0 -2
  84. package/dist/node/plugins/stats.js +0 -10
  85. package/dist/node/src/ass-gen/__tests__/canvas.test.d.ts +0 -1
  86. package/dist/node/src/ass-gen/__tests__/generate.test.d.ts +0 -1
  87. package/dist/node/src/ass-gen/ass/create.d.ts +0 -4
  88. package/dist/node/src/ass-gen/ass/dialogue.d.ts +0 -16
  89. package/dist/node/src/ass-gen/ass/event.d.ts +0 -2
  90. package/dist/node/src/ass-gen/ass/info.d.ts +0 -8
  91. package/dist/node/src/ass-gen/ass/raw.d.ts +0 -14
  92. package/dist/node/src/ass-gen/ass/style.d.ts +0 -2
  93. package/dist/node/src/ass-gen/config.d.ts +0 -2
  94. package/dist/node/src/ass-gen/index.d.ts +0 -30
  95. package/dist/node/src/ass-gen/types.d.ts +0 -71
  96. package/dist/node/src/ass-gen/util/color.d.ts +0 -18
  97. package/dist/node/src/ass-gen/util/danconvert.d.ts +0 -5
  98. package/dist/node/src/ass-gen/util/index.d.ts +0 -4
  99. package/dist/node/src/ass-gen/util/lang.d.ts +0 -3
  100. package/dist/node/src/ass-gen/util/layout.d.ts +0 -4
  101. package/dist/node/src/index.d.ts +0 -283
  102. package/dist/node/src/index.test.d.ts +0 -1
  103. package/dist/node/src/plugins/bili/dedupe.d.ts +0 -3
  104. package/dist/node/src/plugins/bili/history-danmaku-fast-forward.d.ts +0 -18
  105. package/dist/node/src/plugins/bili/index.d.ts +0 -2
  106. package/dist/node/src/plugins/bili/index.test.d.ts +0 -1
  107. package/dist/node/src/plugins/index.d.ts +0 -2
  108. package/dist/node/src/plugins/stats/getLatestDan.d.ts +0 -6
  109. package/dist/node/src/plugins/stats/index.d.ts +0 -1
  110. package/dist/node/src/plugins/stats/index.test.d.ts +0 -1
  111. package/dist/node/src/proto/gen/bilibili/community/service/dm/v1/dm_pb.d.ts +0 -3426
  112. package/dist/node/src/proto/gen/danuni/danmaku/v1/danmaku_pb.d.ts +0 -176
  113. package/dist/node/src/utils/dm-gen.d.ts +0 -309
  114. package/dist/node/src/utils/dm-gen.test.d.ts +0 -1
  115. package/dist/node/src/utils/fileParser.d.ts +0 -3
  116. package/dist/node/src/utils/id-gen.d.ts +0 -50
  117. package/dist/node/src/utils/platform.d.ts +0 -24
  118. package/dist/umd/index.umd.min.js +0 -32091
  119. package/dist/umd/index.umd.min.js.LICENSE.txt +0 -34
  120. package/dist/umd/plugins/bili.umd.min.js +0 -32002
  121. package/dist/umd/plugins/bili.umd.min.js.LICENSE.txt +0 -34
  122. package/dist/umd/plugins/index.umd.min.js +0 -32018
  123. package/dist/umd/plugins/index.umd.min.js.LICENSE.txt +0 -34
  124. package/dist/umd/plugins/stats.umd.min.js +0 -39
  125. package/dist/umd/src/ass-gen/__tests__/canvas.test.d.ts +0 -1
  126. package/dist/umd/src/ass-gen/__tests__/generate.test.d.ts +0 -1
  127. package/dist/umd/src/ass-gen/ass/create.d.ts +0 -4
  128. package/dist/umd/src/ass-gen/ass/dialogue.d.ts +0 -16
  129. package/dist/umd/src/ass-gen/ass/event.d.ts +0 -2
  130. package/dist/umd/src/ass-gen/ass/info.d.ts +0 -8
  131. package/dist/umd/src/ass-gen/ass/raw.d.ts +0 -14
  132. package/dist/umd/src/ass-gen/ass/style.d.ts +0 -2
  133. package/dist/umd/src/ass-gen/config.d.ts +0 -2
  134. package/dist/umd/src/ass-gen/index.d.ts +0 -30
  135. package/dist/umd/src/ass-gen/types.d.ts +0 -71
  136. package/dist/umd/src/ass-gen/util/color.d.ts +0 -18
  137. package/dist/umd/src/ass-gen/util/danconvert.d.ts +0 -5
  138. package/dist/umd/src/ass-gen/util/index.d.ts +0 -4
  139. package/dist/umd/src/ass-gen/util/lang.d.ts +0 -3
  140. package/dist/umd/src/ass-gen/util/layout.d.ts +0 -4
  141. package/dist/umd/src/index.d.ts +0 -283
  142. package/dist/umd/src/index.test.d.ts +0 -1
  143. package/dist/umd/src/plugins/bili/dedupe.d.ts +0 -3
  144. package/dist/umd/src/plugins/bili/history-danmaku-fast-forward.d.ts +0 -18
  145. package/dist/umd/src/plugins/bili/index.d.ts +0 -2
  146. package/dist/umd/src/plugins/bili/index.test.d.ts +0 -1
  147. package/dist/umd/src/plugins/index.d.ts +0 -2
  148. package/dist/umd/src/plugins/stats/getLatestDan.d.ts +0 -6
  149. package/dist/umd/src/plugins/stats/index.d.ts +0 -1
  150. package/dist/umd/src/plugins/stats/index.test.d.ts +0 -1
  151. package/dist/umd/src/proto/gen/bilibili/community/service/dm/v1/dm_pb.d.ts +0 -3426
  152. package/dist/umd/src/proto/gen/danuni/danmaku/v1/danmaku_pb.d.ts +0 -176
  153. package/dist/umd/src/utils/dm-gen.d.ts +0 -309
  154. package/dist/umd/src/utils/dm-gen.test.d.ts +0 -1
  155. package/dist/umd/src/utils/fileParser.d.ts +0 -3
  156. package/dist/umd/src/utils/id-gen.d.ts +0 -50
  157. package/dist/umd/src/utils/platform.d.ts +0 -24
  158. package/plugins/package.json +0 -6
  159. package/rslib.config.ts +0 -101
  160. package/src/ass-gen/__tests__/898651903.xml +0 -1619
  161. package/src/ass-gen/__tests__/898651903.xml.ass +0 -1516
  162. package/src/ass-gen/__tests__/canvas.test.ts +0 -15
  163. package/src/ass-gen/__tests__/generate.test.ts +0 -26
  164. package/src/ass-gen/ass/create.ts +0 -37
  165. package/src/ass-gen/ass/dialogue.ts +0 -90
  166. package/src/ass-gen/ass/event.ts +0 -57
  167. package/src/ass-gen/ass/info.ts +0 -27
  168. package/src/ass-gen/ass/raw.ts +0 -78
  169. package/src/ass-gen/ass/style.ts +0 -66
  170. package/src/ass-gen/config.ts +0 -45
  171. package/src/ass-gen/index.ts +0 -73
  172. package/src/ass-gen/types.ts +0 -76
  173. package/src/ass-gen/util/color.ts +0 -55
  174. package/src/ass-gen/util/danconvert.ts +0 -43
  175. package/src/ass-gen/util/index.ts +0 -10
  176. package/src/ass-gen/util/lang.ts +0 -35
  177. package/src/ass-gen/util/layout.ts +0 -242
  178. package/src/index.test.ts +0 -157
  179. package/src/index.ts +0 -1144
  180. package/src/plugins/bili/README.md +0 -87
  181. package/src/plugins/bili/dedupe.ts +0 -29
  182. package/src/plugins/bili/history-danmaku-fast-forward.ts +0 -86
  183. package/src/plugins/bili/index.test.ts +0 -129
  184. package/src/plugins/bili/index.ts +0 -2
  185. package/src/plugins/index.ts +0 -2
  186. package/src/plugins/stats/README.md +0 -44
  187. package/src/plugins/stats/getLatestDan.ts +0 -13
  188. package/src/plugins/stats/index.test.ts +0 -39
  189. package/src/plugins/stats/index.ts +0 -1
  190. package/src/proto/gen/bilibili/community/service/dm/v1/dm_pb.ts +0 -4072
  191. package/src/proto/gen/danuni/danmaku/v1/danmaku_pb.ts +0 -223
  192. package/src/proto/src/bilibili/community/service/dm/v1/dm.proto +0 -1095
  193. package/src/proto/src/danuni/danmaku/v1/danmaku.proto +0 -52
  194. package/src/utils/dm-gen.test.ts +0 -129
  195. package/src/utils/dm-gen.ts +0 -1078
  196. package/src/utils/fileParser.ts +0 -37
  197. package/src/utils/id-gen.ts +0 -73
  198. package/src/utils/platform.ts +0 -38
  199. package/tsconfig.json +0 -108
  200. package/types/tsconfig.tsbuildinfo +0 -1
@@ -1,10 +0,0 @@
1
- export {
2
- decimalColorToRGB,
3
- formatColor,
4
- getDecoratingColor,
5
- hexColorToRGB,
6
- isWhite,
7
- } from './color'
8
- export { DanmakuList2UniPool, UniPool2DanmakuLists } from './danconvert'
9
- export { arrayOfLength, assign, uniqueArray } from './lang'
10
- export { layoutDanmaku } from './layout'
@@ -1,35 +0,0 @@
1
- export const assign = <T extends object>(
2
- source: T,
3
- ...targets: Partial<T>[]
4
- ): T => {
5
- for (const target of targets) {
6
- for (const key of Object.keys(target)) {
7
- ;(source as any)[key] = target[key as keyof typeof target]
8
- }
9
- }
10
-
11
- return source
12
- }
13
-
14
- export const arrayOfLength = <T>(length: number, defaultValue: T): T[] => {
15
- // eslint-disable-next-line unicorn/no-new-array
16
- const array = new Array(length)
17
- for (let i = 0; i < length; i++) {
18
- array[i] = defaultValue
19
- }
20
- return array
21
- }
22
-
23
- export const uniqueArray = <T>(array: T[]) => {
24
- const duplicates: T[] = []
25
- const result: T[] = []
26
-
27
- for (const item of array) {
28
- if (!duplicates.includes(item)) {
29
- duplicates.push(item)
30
- result.push(item)
31
- }
32
- }
33
-
34
- return result
35
- }
@@ -1,242 +0,0 @@
1
- import type { UniPool } from '../..'
2
- import type { CanvasCtx, Danmaku, SubtitleStyle } from '../types'
3
-
4
- import { DanmakuType, FontSize } from '../types'
5
- import { DanmakuList2UniPool, UniPool2DanmakuLists } from './danconvert'
6
- import { arrayOfLength } from './lang'
7
-
8
- // 计算一个矩形移进屏幕的时间(头进屏幕到尾巴进屏幕)
9
- const computeScrollInTime = (
10
- rectWidth: number,
11
- screenWidth: number,
12
- scrollTime: number,
13
- ) => {
14
- const speed = (screenWidth + rectWidth) / scrollTime
15
- return rectWidth / speed
16
- }
17
-
18
- // 计算一个矩形在屏幕上的时间(头进屏幕到头离开屏幕)
19
- const computeScrollOverTime = (
20
- rectWidth: number,
21
- screenWidth: number,
22
- scrollTime: number,
23
- ) => {
24
- const speed = (screenWidth + rectWidth) / scrollTime
25
- return screenWidth / speed
26
- }
27
-
28
- interface ScrollGrid {
29
- start: number
30
- end: number
31
- width: number
32
- }
33
-
34
- type FixGrid = number
35
-
36
- interface DanmakuGrids {
37
- // [DanmakuType.SCROLL]: ScrollGrid[];
38
- // [DanmakuType.TOP]: FixGrid[];
39
- // [DanmakuType.BOTTOM]: FixGrid[];
40
- 1: ScrollGrid[] // DanmakuType.SCROLL
41
- 3: FixGrid[] // DanmakuType.TOP
42
- 2: FixGrid[] // DanmakuType.BOTTOM
43
- }
44
-
45
- const splitGrids = ({
46
- fontSize,
47
- padding,
48
- playResY,
49
- bottomSpace,
50
- }: {
51
- fontSize: number[]
52
- padding: number[]
53
- playResY: number
54
- bottomSpace: number
55
- }): DanmakuGrids => {
56
- const defaultFontSize = fontSize[FontSize.NORMAL]
57
- const paddingTop = padding[0]
58
- const paddingBottom = padding[2]
59
- const linesCount = Math.floor(
60
- (playResY - bottomSpace) / (defaultFontSize + paddingTop + paddingBottom),
61
- )
62
-
63
- // 首先以通用的字号把屏幕的高度分成若干行,字幕只允许落在一个行里
64
- return {
65
- // 每一行里的数字是当前在这一行里的最后一条弹幕区域(算入padding)的右边离开屏幕的时间,
66
- // 这个时间和下一条弹幕的左边离开屏幕的时间相比较,能确定在整个弹幕的飞行过程中是否会相撞(不同长度弹幕飞行速度不同)|,
67
- // 当每一条弹幕加到一行里时,就会把这个时间算出来,获取新的弹幕时就可以判断哪一行是允许放的就放进去
68
- 1: arrayOfLength(linesCount, {
69
- start: 0,
70
- end: 0,
71
- width: 0,
72
- }),
73
- // 对于固定的弹幕,每一行里都存放弹幕的消失时间,只要这行的弹幕没消失就不能放新弹幕进来
74
- 3: arrayOfLength(linesCount, 0),
75
- 2: arrayOfLength(linesCount, 0),
76
- }
77
- }
78
-
79
- export const measureTextWidthConstructor = (canvasContext: CanvasCtx) => {
80
- const supportTextMeasure = !!canvasContext.measureText('中')
81
-
82
- if (supportTextMeasure) {
83
- return (
84
- fontName: string,
85
- fontSize: number,
86
- bold: boolean,
87
- text: string,
88
- ) => {
89
- canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`
90
- const textWidth = canvasContext.measureText(text).width
91
- return Math.round(textWidth)
92
- }
93
- }
94
-
95
- console.warn(
96
- '[Warn] node-canvas is installed without text measure support, layout may not be correct',
97
- )
98
- return (_fontName: string, fontSize: number, _bold: boolean, text: string) =>
99
- text.length * fontSize
100
- }
101
-
102
- // 找到能用的行
103
- const resolveAvailableFixGrid = (grids: FixGrid[], time: number) => {
104
- for (const [i, grid] of grids.entries()) {
105
- if (grid <= time) {
106
- return i
107
- }
108
- }
109
-
110
- return -1
111
- }
112
-
113
- const resolveAvailableScrollGrid = (
114
- grids: ScrollGrid[],
115
- rectWidth: number,
116
- screenWidth: number,
117
- time: number,
118
- duration: number,
119
- ) => {
120
- for (const [i, previous] of grids.entries()) {
121
- // 对于滚动弹幕,要算两个位置:
122
- //
123
- // 1. 前一条弹幕的尾巴进屏幕之前,后一条弹幕不能开始出现
124
- // 2. 前一条弹幕的尾巴离开屏幕之前,后一条弹幕的头不能离开屏幕
125
- const previousInTime =
126
- previous.start +
127
- computeScrollInTime(previous.width, screenWidth, duration)
128
- const currentOverTime =
129
- time + computeScrollOverTime(rectWidth, screenWidth, duration)
130
-
131
- if (time >= previousInTime && currentOverTime >= previous.end) {
132
- return i
133
- }
134
- }
135
-
136
- return -1
137
- }
138
-
139
- const initializeLayout = (config: SubtitleStyle, canvasCtx: CanvasCtx) => {
140
- const {
141
- playResX,
142
- playResY,
143
- fontName,
144
- fontSize,
145
- bold,
146
- padding,
147
- scrollTime,
148
- fixTime,
149
- bottomSpace,
150
- } = config
151
- const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding
152
-
153
- const defaultFontSize = fontSize[FontSize.NORMAL]
154
- const grids = splitGrids(config)
155
- const gridHeight = defaultFontSize + paddingTop + paddingBottom
156
-
157
- return (danmaku: Danmaku) => {
158
- const targetGrids = grids[danmaku.type as keyof DanmakuGrids]
159
- const danmakuFontSize = fontSize[danmaku.fontSizeType]
160
- const rectWidth =
161
- measureTextWidthConstructor(canvasCtx)(
162
- fontName,
163
- danmakuFontSize,
164
- bold,
165
- danmaku.content,
166
- ) +
167
- paddingLeft +
168
- paddingRight
169
- const verticalOffset =
170
- paddingTop + Math.round((defaultFontSize - danmakuFontSize) / 2)
171
-
172
- if (danmaku.type === DanmakuType.SCROLL) {
173
- const scrollGrids = targetGrids as ScrollGrid[]
174
- const gridNumber = resolveAvailableScrollGrid(
175
- scrollGrids,
176
- rectWidth,
177
- playResX,
178
- danmaku.time,
179
- scrollTime,
180
- )
181
- if (gridNumber < 0) {
182
- // console.warn(`[Warn] Collision ${danmaku.time}: ${danmaku.content}`)
183
- return null
184
- }
185
- targetGrids[gridNumber] = {
186
- width: rectWidth,
187
- start: danmaku.time,
188
- end: danmaku.time + scrollTime,
189
- }
190
-
191
- const top = gridNumber * gridHeight + verticalOffset
192
- const start = playResX + paddingLeft
193
- const end = -rectWidth
194
-
195
- return { ...danmaku, top, start, end }
196
- } else {
197
- const gridNumber = resolveAvailableFixGrid(
198
- targetGrids as FixGrid[],
199
- danmaku.time,
200
- )
201
- if (gridNumber < 0) {
202
- // console.warn(`[Warn] Collision ${danmaku.time}: ${danmaku.content}`)
203
- return null
204
- }
205
- if (danmaku.type === DanmakuType.TOP) {
206
- targetGrids[gridNumber] = danmaku.time + fixTime
207
-
208
- const top = gridNumber * gridHeight + verticalOffset
209
- // 固定弹幕横向按中心点计算
210
- const left = Math.round(playResX / 2)
211
-
212
- return { ...danmaku, top, left }
213
- }
214
-
215
- targetGrids[gridNumber] = danmaku.time + fixTime
216
-
217
- // 底部字幕的格子是留出`bottomSpace`的位置后从下往上算的
218
- const top =
219
- playResY -
220
- bottomSpace -
221
- gridHeight * gridNumber -
222
- gridHeight +
223
- verticalOffset
224
- const left = Math.round(playResX / 2)
225
-
226
- return { ...danmaku, top, left }
227
- }
228
- }
229
- }
230
-
231
- export const layoutDanmaku = (
232
- inputList: UniPool,
233
- config: SubtitleStyle,
234
- canvasCtx: CanvasCtx,
235
- ): UniPool => {
236
- const list = [...UniPool2DanmakuLists(inputList)].toSorted(
237
- (x, y) => x.time - y.time,
238
- )
239
- const layout = initializeLayout(config, canvasCtx)
240
-
241
- return DanmakuList2UniPool(list.map(layout).filter((danmaku) => !!danmaku))
242
- }
package/src/index.test.ts DELETED
@@ -1,157 +0,0 @@
1
- import { createCanvas } from 'canvas'
2
- import { describe, expect, it } from 'vitest'
3
-
4
- import { UniPool } from './index'
5
-
6
- const xml = `<i>
7
- <chatserver>chat.bilibili.com</chatserver>
8
- <chatid>1156756312</chatid>
9
- <mission>0</mission>
10
- <maxlimit>2947</maxlimit>
11
- <state>0</state>
12
- <real_name>0</real_name>
13
- <source>k-v</source>
14
- <d p="13.213,1,25,16777215,1686314041,3,ff41173d,1335658005672492032">喜欢</d>
15
- <d p="13.213,1,25,16777215,1686590010,0,296b35b5,1337972999512832512">来了 哈哈~~</d>
16
- <d p="13.246,1,25,16777215,1686276875,0,5664cfc4,1335346233459549696">就是</d>
17
- <d p="13.266,1,25,16777215,1686283375,0,c7e6646f,1335400761013670912">什么鬼?</d>
18
- <d p="13.284,1,25,16777215,1686291338,0,38662881,1335467554877267456">哇哦</d>
19
- <d p="13.306,1,25,16777215,1686268410,0,4c01de10,1335275224983600896">试试</d>
20
- <d p="13.331,1,25,16777215,1686948453,3,56a3c5d5,1340979831550069760">不喜欢</d>
21
- <d p="13.374,1,25,16777215,1686300770,3,647fe355,1335546672880933888">不喜欢</d>
22
- <d p="13.376,1,25,16777215,1686297921,0,469d94b8,1335522778300134400">哦豁</d>
23
- <d p="13.419,1,25,8700107,1686268005,0,be402447,1335271828100244224">太酷啦</d>
24
- <d p="13.419,1,25,16777215,1686316828,3,7ffb6619,1335681385016736768">喜欢</d>
25
- <d p="13.459,1,25,16777215,1686299729,0,45834405,1335537942797634048">一般,不好看</d>
26
- <d p="13.462,1,25,16777215,1686302133,0,3cab672c,1335558106620590080">哈哈哈</d>
27
- <d p="13.481,1,25,16777215,1686297342,0,ce67fafd,1335517923728804864">?</d>
28
- <d p="13.499,1,25,16777215,1686301548,3,2848bf1c,1335553202649003264">不喜欢</d>
29
- </i>`
30
- describe('转化自', () => {
31
- it('bili(xml)[双向]', () => {
32
- const pool = UniPool.fromBiliXML(xml)
33
- console.info(xml)
34
- console.info(pool)
35
- console.info(pool.toBiliXML())
36
- console.info(pool.toBiliXML({ avoidSenderIDWithAt: true }))
37
- const imp = UniPool.import(xml)
38
- expect(imp.fmt).toBe('bili.xml')
39
- expect(imp.pool).toEqual(pool)
40
- const imp2 = UniPool.import(xml, undefined, 'test-bili.xml')
41
- expect(imp2).toEqual(imp)
42
- })
43
- it('artplayer(json)', () => {
44
- const json = {
45
- danmuku: [
46
- {
47
- text: 'artplayer测试弹幕', // 弹幕文本
48
- time: 10, // 弹幕时间, 默认为当前播放器时间
49
- mode: 0, // 弹幕模式: 0: 滚动(默认),1: 顶部,2: 底部
50
- color: '#FFFFFF', // 弹幕颜色,默认为白色
51
- border: false, // 弹幕是否有描边, 默认为 false
52
- style: { border: '10rem' }, // 弹幕自定义样式, 默认为空对象
53
- },
54
- ],
55
- }
56
- const pool = UniPool.fromArtplayer(json, 'playerid-test', 'acfun')
57
- console.info(json)
58
- console.info(pool)
59
- const imp = UniPool.import(json)
60
- expect(imp.fmt).toBe('artplayer.json')
61
- // 该适配器ctime始终为now,无法双向测试
62
- // expect(imp.pool).toEqual(pool)
63
- UniPool.import(json, undefined, 'test-artplayer.json')
64
- // expect(imp2).toEqual(imp)
65
- })
66
- it('ass[双向]', () => {
67
- const canvas = createCanvas(50, 50)
68
- const pool = UniPool.fromBiliXML(xml)
69
- const ass = pool.toASS(canvas.getContext('2d'))
70
- console.info(ass)
71
- console.info(UniPool.fromASS(ass))
72
- const imp = UniPool.import(ass)
73
- expect(imp.fmt).toBe('common.ass')
74
- expect(imp.pool).toEqual(pool)
75
- const imp2 = UniPool.import(ass, undefined, 'test-common.ass')
76
- expect(imp2).toEqual(imp)
77
- })
78
- it('pb[双向]', () => {
79
- const pool = UniPool.fromBiliXML(xml)
80
- const pb = pool.toPb()
81
- console.info(UniPool.fromPb(pb))
82
- const imp = UniPool.import(pb)
83
- expect(imp.fmt).toBe('danuni.binpb')
84
- expect(imp.pool).toEqual(pool)
85
- const imp2 = UniPool.import(pb, undefined, 'test-danuni.binpb')
86
- expect(imp2).toEqual(imp)
87
- })
88
- it('DDPlay[双向]', () => {
89
- const pool = UniPool.fromBiliXML(xml)
90
- const ddplay = pool.toDDPlay()
91
- console.info(UniPool.fromDDPlay(ddplay, '1'))
92
- const imp = UniPool.import(ddplay)
93
- expect(imp.fmt).toBe('ddplay.json')
94
- // 该适配器ctime始终为now,无法双向测试
95
- UniPool.import(ddplay, undefined, 'test-ddplay.json')
96
- // expect(imp2).toEqual(imp)
97
- })
98
- it('min[双向]', () => {
99
- const pool = UniPool.fromBiliXML(xml)
100
- const min = pool.minify()
101
- console.info(min)
102
- const imp = UniPool.import(min)
103
- expect(imp.fmt).toBe('danuni.min.json')
104
- // 该适配器ctime始终为now,无法双向测试
105
- // expect(imp.pool).toEqual(pool)
106
- UniPool.import(min, undefined, 'test-danuni.min.json')
107
- // expect(imp2).toEqual(imp)
108
- })
109
- })
110
-
111
- describe('共通值', () => {
112
- const pool = UniPool.fromBiliXML(xml)
113
- it('获取shared', () => {
114
- console.info(pool.getMost('SOID'))
115
- console.info(pool.shared)
116
- expect(pool.getShared('SOID')).toBe(pool.shared.SOID)
117
- })
118
- it('获取most', () => {
119
- console.info(pool.getMost('senderID'))
120
- console.info(pool.most)
121
- expect(pool.getMost('senderID').val).toBe(pool.most.senderID)
122
- })
123
- it('按pool分组', () => {
124
- console.info(pool.split('pool'))
125
- })
126
- })
127
-
128
- describe('其它', () => {
129
- const pool = UniPool.fromBiliXML(xml)
130
- it('最小化', () => {
131
- console.info(pool.minify())
132
- })
133
- it('合并范围内重复', () => {
134
- console.info(pool.merge(10).minify())
135
- })
136
- it('禁止DMID生成', () => {
137
- console.info(
138
- UniPool.fromBiliXML(xml, {
139
- dmid: false,
140
- }),
141
- )
142
- })
143
- it('自定义DMID生成长度', () => {
144
- console.info(
145
- UniPool.fromBiliXML(xml, {
146
- dmid: 64,
147
- }),
148
- )
149
- })
150
- it('自定义DMID生成器', () => {
151
- console.info(
152
- UniPool.fromBiliXML(xml, {
153
- dmid: (dan) => dan.ctime.toString() + Math.random(),
154
- }),
155
- )
156
- })
157
- })