@xpadev-net/niconicomments 0.2.19 → 0.2.22

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.
@@ -0,0 +1,225 @@
1
+ type inputFormatType =
2
+ | "niconicome"
3
+ | "formatted"
4
+ | "legacy"
5
+ | "owner"
6
+ | "v1"
7
+ | "default";
8
+ type InitOptions = {
9
+ useLegacy?: boolean;
10
+ formatted?: boolean;
11
+ format?: inputFormatType;
12
+ video?: HTMLVideoElement | undefined;
13
+ showCollision?: boolean;
14
+ showFPS?: boolean;
15
+ showCommentCount?: boolean;
16
+ drawAllImageOnLoad?: boolean;
17
+ debug?: boolean;
18
+ enableLegacyPiP?: boolean;
19
+ keepCA?: boolean;
20
+ };
21
+ type Options = {
22
+ useLegacy: boolean;
23
+ formatted: boolean;
24
+ format: inputFormatType;
25
+ video: HTMLVideoElement | undefined;
26
+ showCollision: boolean;
27
+ showFPS: boolean;
28
+ showCommentCount: boolean;
29
+ drawAllImageOnLoad: boolean;
30
+ debug: boolean;
31
+ enableLegacyPiP: boolean;
32
+ keepCA: boolean;
33
+ };
34
+ type rawApiResponse = {
35
+ [key: string]: apiPing | apiThread | apiLeaf | apiGlobalNumRes | apiChat;
36
+ };
37
+ type apiPing = {
38
+ content: string;
39
+ };
40
+ type apiThread = {
41
+ resultcode: number;
42
+ thread: string;
43
+ server_time: number;
44
+ ticket: string;
45
+ revision: number;
46
+ };
47
+ type apiLeaf = {
48
+ thread: string;
49
+ count: number;
50
+ };
51
+ type apiGlobalNumRes = {
52
+ thread: string;
53
+ num_res: number;
54
+ };
55
+ type apiChat = {
56
+ thread: string;
57
+ no: number;
58
+ vpos: number;
59
+ date: number;
60
+ date_usec: number;
61
+ nicoru: number;
62
+ premium: number;
63
+ anonymity: number;
64
+ user_id: string;
65
+ mail: string;
66
+ content: string;
67
+ deleted: number;
68
+ };
69
+ type formattedComment = {
70
+ id: number;
71
+ vpos: number;
72
+ content: string;
73
+ date: number;
74
+ date_usec: number;
75
+ owner: boolean;
76
+ premium: boolean;
77
+ mail: string[];
78
+ user_id: number;
79
+ layer: number;
80
+ };
81
+ type formattedLegacyComment = {
82
+ id: number;
83
+ vpos: number;
84
+ content: string;
85
+ date: number;
86
+ date_usec: number;
87
+ owner: boolean;
88
+ premium: boolean;
89
+ mail: string[];
90
+ };
91
+ type formattedCommentWithFont = formattedComment & {
92
+ loc: commentLoc;
93
+ size: commentSize;
94
+ fontSize: number;
95
+ font: commentFont;
96
+ color: string;
97
+ full: boolean;
98
+ ender: boolean;
99
+ _live: boolean;
100
+ long: number;
101
+ invisible: boolean;
102
+ };
103
+ type formattedCommentWithSize = formattedCommentWithFont & {
104
+ height: number;
105
+ width: number;
106
+ width_max: number;
107
+ width_min: number;
108
+ lineHeight: number;
109
+ };
110
+ type parsedComment = formattedCommentWithSize & {
111
+ posY: number;
112
+ image?: HTMLCanvasElement | boolean;
113
+ };
114
+ type groupedResult = formattedCommentWithFont & {
115
+ index: number;
116
+ };
117
+ type groupedComments = {
118
+ [key in commentFont]: { [key: string]: groupedResult[] };
119
+ };
120
+ type commentFont = "defont" | "mincho" | "gothic";
121
+ type commentSize = "big" | "medium" | "small";
122
+ type commentLoc = "ue" | "naka" | "shita";
123
+ type collision = { [key in collisionPos]: collisionItem };
124
+ type collisionPos = "ue" | "shita" | "right" | "left";
125
+ type collisionItem = { [p: number]: number[] };
126
+ type nicoScript = {
127
+ reverse: nicoScriptReverse[];
128
+ ban: nicoScriptBan[];
129
+ default: nicoScriptDefault[];
130
+ replace: nicoScriptReplace[];
131
+ };
132
+ type nicoScriptReverse = {
133
+ target: nicoScriptReverseTarget;
134
+ start: number;
135
+ end: number;
136
+ };
137
+ type nicoScriptReverseTarget = "コメ" | "投コメ" | "全";
138
+ type nicoScriptReplace = {
139
+ start: number;
140
+ long: number | undefined;
141
+ keyword: string;
142
+ replace: string;
143
+ range: nicoScriptReplaceRange;
144
+ target: nicoScriptReplaceTarget;
145
+ condition: nicoScriptReplaceCondition;
146
+ color: string | undefined;
147
+ size: commentSize | undefined;
148
+ font: commentFont | undefined;
149
+ loc: commentLoc | undefined;
150
+ no: number;
151
+ };
152
+ type nicoScriptReplaceRange = "単" | "全";
153
+ type nicoScriptReplaceTarget = "コメ" | "投コメ" | "全" | "含まない" | "含む";
154
+ type nicoScriptReplaceCondition = "完全一致" | "部分一致";
155
+ type nicoScriptBan = {
156
+ start: number;
157
+ end: number;
158
+ };
159
+ type nicoScriptDefault = {
160
+ start: number;
161
+ long: number | undefined;
162
+ color: string | undefined;
163
+ size: commentSize | undefined;
164
+ font: commentFont | undefined;
165
+ loc: commentLoc | undefined;
166
+ };
167
+ type measureTextResult = {
168
+ width: number;
169
+ width_max: number;
170
+ width_min: number;
171
+ height: number;
172
+ resized: boolean;
173
+ fontSize: number;
174
+ lineHeight: number;
175
+ };
176
+ type parsedCommand = {
177
+ loc: commentLoc | undefined;
178
+ size: commentSize | undefined;
179
+ fontSize: number | undefined;
180
+ color: string | undefined;
181
+ font: commentFont | undefined;
182
+ full: boolean;
183
+ ender: boolean;
184
+ _live: boolean;
185
+ invisible: boolean;
186
+ long: number | undefined;
187
+ };
188
+ type typeFontSize = {
189
+ [key in commentSize]: {
190
+ default: number;
191
+ resized: number;
192
+ };
193
+ };
194
+ type typeDoubleResizeMaxWidth = {
195
+ [key in "full" | "normal"]: {
196
+ legacy: number;
197
+ default: number;
198
+ };
199
+ };
200
+ type v1Thread = {
201
+ id: string;
202
+ fork: string;
203
+ commentCount: number;
204
+ comments: { [key: string]: v1Comment };
205
+ };
206
+ type v1Comment = {
207
+ id: string;
208
+ no: number;
209
+ vposMs: number;
210
+ body: string;
211
+ commands: string[];
212
+ userId: string;
213
+ isPremium: boolean;
214
+ score: number;
215
+ postedAt: string;
216
+ nicoruCount: number;
217
+ nicoruId: undefined;
218
+ source: string;
219
+ isMyPost: boolean;
220
+ };
221
+ type ownerComment = {
222
+ time: string;
223
+ command: string;
224
+ comment: string;
225
+ };
package/package.json CHANGED
@@ -1,42 +1,60 @@
1
- {
2
- "name": "@xpadev-net/niconicomments",
3
- "version": "0.2.19",
4
- "description": "NiconiComments is a comment drawing library that is somewhat compatible with the official Nico Nico Douga player.",
5
- "main": "dist/bundle.js",
6
- "types": "dist/dts/main.d.ts",
7
- "scripts": {
8
- "test": "echo \"Error: no test specified\" && exit 1",
9
- "build": "rollup -c rollup.config.js",
10
- "watch": "rollup -c rollup.config.js -w",
11
- "typedoc": "typedoc --options tsdoc.json --out ./docs/type/ ./src/main.ts",
12
- "tsc": "tsc --emitDeclarationOnly",
13
- "prepublishOnly": "npm run tsc&&npm run build"
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "git+https://github.com/xpadev-net/niconicomments.git"
18
- },
19
- "keywords": [
20
- "niconico"
21
- ],
22
- "author": "xpadev(xpadev.net)",
23
- "bugs": {
24
- "url": "https://github.com/xpadev-net/niconicomments/issues"
25
- },
26
- "files": [
27
- "dist/bundle.js",
28
- "dist/dts/main.d.ts",
29
- "dist/dts/main.d.ts.map"
30
- ],
31
- "homepage": "https://xpadev.net/niconicomments/docs/",
32
- "license": "MIT",
33
- "devDependencies": {
34
- "@babel/preset-env": "^7.18.2",
35
- "@rollup/plugin-babel": "^5.3.0",
36
- "@rollup/plugin-typescript": "^8.3.2",
37
- "rollup": "^2.75.6",
38
- "typedoc": "^0.22.17",
39
- "typedoc-plugin-missing-exports": "^0.22.6",
40
- "typescript": "^4.7.3"
41
- }
42
- }
1
+ {
2
+ "name": "@xpadev-net/niconicomments",
3
+ "version": "0.2.22",
4
+ "description": "NiconiComments is a comment drawing library that is somewhat compatible with the official Nico Nico Douga player.",
5
+ "main": "dist/bundle.js",
6
+ "types": "dist/dts/types.d.ts",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1",
9
+ "build": "rollup -c rollup.config.js",
10
+ "watch": "rollup -c rollup.config.js -w",
11
+ "typedoc": "typedoc --entryPointStrategy Expand --out ./docs/type/ ./src/",
12
+ "copy-dts": "npx copyfiles -u 2 src/@types/*.d.ts dist/dts",
13
+ "prepublishOnly": "npm run copy-dts&&npm run build",
14
+ "check-types": "npx tsc --noEmit --jsx react",
15
+ "eslint": "eslint src/**/*.ts*",
16
+ "eslint:fix": "eslint src/**/*.ts* --fix",
17
+ "format": "prettier --write \"src/**/*.{tsx,ts,js,json,css,scss}\"",
18
+ "lint": "npm run eslint&&npm run check-types",
19
+ "lint:fix": "npm run format&&npm run eslint:fix&&npm run check-types",
20
+ "prepare": "husky install"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/xpadev-net/niconicomments.git"
25
+ },
26
+ "keywords": [
27
+ "niconico"
28
+ ],
29
+ "author": "xpadev(xpadev.net)",
30
+ "bugs": {
31
+ "url": "https://github.com/xpadev-net/niconicomments/issues"
32
+ },
33
+ "files": [
34
+ "dist/bundle.js",
35
+ "dist/dts/types.d.ts"
36
+ ],
37
+ "homepage": "https://xpadev.net/niconicomments/docs/",
38
+ "license": "MIT",
39
+ "devDependencies": {
40
+ "@babel/core": "^7.18.10",
41
+ "@babel/preset-env": "^7.18.10",
42
+ "@rollup/plugin-babel": "^5.3.0",
43
+ "@rollup/plugin-commonjs": "^22.0.2",
44
+ "@rollup/plugin-json": "^4.1.0",
45
+ "@rollup/plugin-node-resolve": "^13.3.0",
46
+ "@rollup/plugin-typescript": "^8.3.4",
47
+ "@typescript-eslint/eslint-plugin": "^5.33.0",
48
+ "@typescript-eslint/parser": "^5.33.0",
49
+ "copyfiles": "^2.4.1",
50
+ "eslint": "^8.21.0",
51
+ "eslint-config-prettier": "8.5.0",
52
+ "husky": "^8.0.0",
53
+ "lint-staged": "^13.0.3",
54
+ "prettier": "2.7.1",
55
+ "rollup": "^2.77.2",
56
+ "typedoc": "^0.23.10",
57
+ "typedoc-plugin-missing-exports": "^0.23.0",
58
+ "typescript": "^4.7.4"
59
+ }
60
+ }
@@ -1,152 +0,0 @@
1
- declare type InitOptions = {
2
- useLegacy: boolean;
3
- formatted: boolean;
4
- video: HTMLVideoElement | null;
5
- showCollision: boolean;
6
- showFPS: boolean;
7
- showCommentCount: boolean;
8
- drawAllImageOnLoad: boolean;
9
- debug: boolean;
10
- enableLegacyPiP: boolean;
11
- };
12
- declare type rawApiResponse = {
13
- [key: string]: apiPing | apiThread | apiLeaf | apiGlobalNumRes | apiChat;
14
- };
15
- declare type apiPing = {
16
- "content": string;
17
- };
18
- declare type apiThread = {
19
- "resultcode": number;
20
- "thread": string;
21
- "server_time": number;
22
- "ticket": string;
23
- "revision": number;
24
- };
25
- declare type apiLeaf = {
26
- "thread": string;
27
- "count": number;
28
- };
29
- declare type apiGlobalNumRes = {
30
- "thread": string;
31
- "num_res": number;
32
- };
33
- declare type apiChat = {
34
- "thread": string;
35
- "no": number;
36
- "vpos": number;
37
- "date": number;
38
- "date_usec": number;
39
- "nicoru": number;
40
- "premium": number;
41
- "anonymity": number;
42
- "user_id": string;
43
- "mail": string;
44
- "content": string;
45
- "deleted": number;
46
- };
47
- declare type formattedComment = {
48
- "id": number;
49
- "vpos": number;
50
- "content": string;
51
- "date": number;
52
- "date_usec": number;
53
- "owner": boolean;
54
- "premium": boolean;
55
- "mail": string[];
56
- };
57
- declare type formattedCommentWithFont = formattedComment & {
58
- "loc": string;
59
- "size": string;
60
- "fontSize": number;
61
- "font": string;
62
- "color": string;
63
- "full": boolean;
64
- "ender": boolean;
65
- "_live": boolean;
66
- "long": number;
67
- "invisible": boolean;
68
- };
69
- declare type formattedCommentWithSize = formattedCommentWithFont & {
70
- "height": number;
71
- "width": number;
72
- "width_max": number;
73
- "width_min": number;
74
- "lineHeight": number;
75
- };
76
- declare type parsedComment = formattedCommentWithSize & {
77
- posY: number;
78
- image?: HTMLCanvasElement | boolean;
79
- };
80
- declare type measureTextResult = {
81
- "width": number;
82
- "width_max": number;
83
- "width_min": number;
84
- "height": number;
85
- "resized": boolean;
86
- "fontSize": number;
87
- "lineHeight": number;
88
- };
89
- declare class NiconiComments {
90
- private canvas;
91
- private context;
92
- private readonly commentYPaddingTop;
93
- private readonly commentYMarginBottom;
94
- private readonly fontSize;
95
- private readonly lineHeight;
96
- private readonly doubleResizeMaxWidth;
97
- private video;
98
- private showCollision;
99
- showFPS: boolean;
100
- showCommentCount: boolean;
101
- enableLegacyPiP: boolean;
102
- private data;
103
- private timeline;
104
- private nicoScripts;
105
- private collision_right;
106
- private collision_left;
107
- private collision_ue;
108
- private collision_shita;
109
- private lastVpos;
110
- private useLegacy;
111
- private fpsCount;
112
- private fps;
113
- constructor(canvas: HTMLCanvasElement, data: (rawApiResponse | formattedComment)[], options?: InitOptions);
114
- parseData(data: rawApiResponse[]): formattedComment[];
115
- preRendering(rawData: formattedComment[], drawAll: boolean): void;
116
- getFont(parsedData: formattedComment[]): formattedCommentWithFont[];
117
- getCommentSize(parsedData: formattedCommentWithFont[]): formattedCommentWithSize[];
118
- getCommentPos(parsedData: parsedComment[]): parsedComment[];
119
- sortComment(parsedData: parsedComment[]): parsedComment[];
120
- measureText(comment: {
121
- content: string;
122
- resized: boolean;
123
- ender: any;
124
- size: string;
125
- fontSize: number;
126
- tateresized: boolean;
127
- font: any;
128
- loc: string;
129
- full: any;
130
- yokoResized: boolean;
131
- lineHeight: number | undefined;
132
- }): measureTextResult;
133
- drawText(comment: parsedComment, vpos: number): void;
134
- getTextImage(i: number): void;
135
- parseCommand(comment: any): {
136
- loc: string | null;
137
- size: string | null;
138
- fontSize: number | null;
139
- color: any;
140
- font: string | null;
141
- full: boolean;
142
- ender: boolean;
143
- _live: boolean;
144
- invisible: boolean;
145
- long: any;
146
- };
147
- parseCommandAndNicoscript(comment: formattedComment): formattedCommentWithFont;
148
- drawCanvas(vpos: number): void;
149
- clear(): void;
150
- }
151
- export default NiconiComments;
152
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}