1+ import { getReactProps } from "@utils/react" ;
12import { Observer } from "../base/observer"
23import { ChatInfo } from "@interfaces/chat" ;
34
4- const getReactFiber = ( node : Node ) => {
5- if ( node == null ) {
6- return ;
7- }
8- return Object . entries ( node ) . find ( ( [ k ] ) =>
9- k . startsWith ( "__reactFiber$" )
10- ) ?. [ 1 ] ;
11- } ;
12-
13- const getReactProps = ( node : Node ) => {
14- if ( node == null ) {
15- return ;
16- }
17- return Object . entries ( node ) . find ( ( [ k ] ) =>
18- k . startsWith ( "__reactProps$" )
19- ) ?. [ 1 ] ;
20- } ;
21-
22- const findReactState = async ( node : Node , criteria : ( value : any ) => { } , raw = false , tries = 0 ) : Promise < any > => {
23- if ( node == null ) {
24- return ;
25- }
26- let fiber = getReactFiber ( node ) ;
27- if ( fiber == null ) {
28- 2
29- if ( tries > 500 ) {
30- return ;
31- }
32- return new Promise ( ( r ) => setTimeout ( r , 50 ) ) . then ( ( ) =>
33- findReactState ( node , criteria , raw , tries + 1 )
34- ) ;
35- }
36- fiber = fiber . return ;
37- while ( fiber != null ) {
38- let state = fiber . memoizedState ;
39- while ( state != null ) {
40- let value : any = state . memoizedState ;
41- if ( state . queue ?. pending ?. hasEagerState ) {
42- value = state . queue . pending . eagerState ;
43- } else if ( state . baseQueue ?. hasEagerState ) {
44- value = state . baseQueue . eagerState ;
45- }
46- if ( value != null && criteria ( value ) ) {
47- return raw ? state : value ;
48- }
49- state = state . next ;
50- }
51- fiber = fiber . return ;
52- }
53- } ;
54-
55- const findReactContext = async ( node : Node , criteria : ( value : any ) => { } , tries = 0 ) : Promise < any > => {
56- if ( node == null ) {
57- return ;
58- }
59- let fiber = getReactFiber ( node ) ;
60- if ( fiber == null ) {
61- if ( tries > 500 ) {
62- return ;
63- }
64- return new Promise ( ( r ) => setTimeout ( r , 50 ) ) . then ( ( ) =>
65- findReactContext ( node , criteria , tries + 1 )
66- ) ;
67- }
68- fiber = fiber . return ;
69- while ( fiber != null ) {
70- let context = fiber . dependencies ?. firstContext ;
71- while ( context != null ) {
72- if ( context . memoizedValue != null && criteria ( context . memoizedValue ) ) {
73- return context . memoizedValue ;
74- }
75- context = context . next ;
76- }
77- fiber = fiber . return ;
78- }
79- } ;
80-
815const liveObserver = new Observer ( '.live_chatting_list_wrapper__a5XTV' , false ) ;
826const vodObserver = new Observer ( '.vod_chatting_list__+LZHw' , false )
837
848const callback = ( elem : Element | null , mr ?: MutationRecord [ ] ) => {
85- console . log ( mr ) ;
86-
879 if ( ! mr ) return ;
8810
8911 const records = Array . from ( mr ) ;
@@ -94,8 +16,6 @@ const callback = (elem: Element | null, mr?: MutationRecord[]) => {
9416
9517 addedNodes . forEach ( ( node ) => {
9618 const _props = getReactProps ( node ) ;
97-
98- console . log ( 'inject chat props: ' , _props )
9919 const chatMessage = _props ?. children ?. props ?. chatMessage ;
10020 const props = _props ?. children ?. props ;
10121
@@ -107,7 +27,7 @@ const callback = (elem: Element | null, mr?: MutationRecord[]) => {
10727 ( node as Element ) . setAttribute ( 'data-tbc-chat-key' , chatMessage ?. key ) ;
10828 ( node as Element ) . setAttribute ( 'data-tbc-chat-time' , time ) ;
10929 ( node as Element ) . setAttribute ( 'data-tbc-chat-verified' , verified ) ;
110- ( node as Element ) . setAttribute ( 'data-tbc-chat-badges' , JSON . stringify ( badges . map ( ( e : any ) => e . imageSource ) ) ) ;
30+ ( node as Element ) . setAttribute ( 'data-tbc-chat-badges' , JSON . stringify ( badges ? .map ( ( e : any ) => e . imageSource ) ) ) ;
11131
11232 const chatInfo : ChatInfo = {
11333 badges : [ ] ,
0 commit comments