react-native-quicktracking-analytics-module 2.0.1 → 2.1.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 (135) hide show
  1. package/LICENSE +1 -1
  2. package/QuicktrackingAnalyticsModule.podspec +29 -0
  3. package/README.md +211 -151
  4. package/android/build.gradle +41 -103
  5. package/android/gradle.properties +5 -5
  6. package/android/src/main/AndroidManifest.xml +1 -2
  7. package/android/src/main/AndroidManifestNew.xml +2 -0
  8. package/android/src/main/java/com/quicktrackinganalyticsmodule/QTSDKManager.kt +112 -0
  9. package/android/src/main/java/com/quicktrackinganalyticsmodule/QuicktrackingAnalyticsModuleModule.kt +259 -0
  10. package/android/src/main/java/com/quicktrackinganalyticsmodule/QuicktrackingAnalyticsModulePackage.kt +17 -0
  11. package/android/src/main/java/com/quicktrackinganalyticsmodule/property/QTViewProperties.kt +84 -0
  12. package/android/src/main/java/com/quicktrackinganalyticsmodule/utils/QTLog.kt +119 -0
  13. package/android/src/main/java/com/quicktrackinganalyticsmodule/utils/RNPropertyManager.kt +35 -0
  14. package/android/src/main/java/com/quicktrackinganalyticsmodule/utils/RNTouchTargetHelper.kt +162 -0
  15. package/android/src/main/java/com/quicktrackinganalyticsmodule/utils/RNUtils.kt +170 -0
  16. package/android/src/main/java/com/quicktrackinganalyticsmodule/utils/RNViewUtils.kt +233 -0
  17. package/ios/QuicktrackingAnalyticsModule.h +1 -4
  18. package/ios/{QuicktrackingAnalyticsModule.m → QuicktrackingAnalyticsModule.mm} +144 -110
  19. package/lib/commonjs/hook.js +564 -0
  20. package/lib/commonjs/hook.js.map +1 -0
  21. package/lib/commonjs/index.js +276 -166
  22. package/lib/commonjs/index.js.map +1 -0
  23. package/lib/commonjs/package.json +1 -0
  24. package/lib/module/hook.js +564 -0
  25. package/lib/module/hook.js.map +1 -0
  26. package/lib/module/index.js +253 -164
  27. package/lib/module/index.js.map +1 -0
  28. package/lib/typescript/index.d.ts +120 -79
  29. package/lib/typescript/index.d.ts.map +1 -0
  30. package/package.json +83 -71
  31. package/src/hook.js +3 -3
  32. package/src/index.tsx +266 -169
  33. package/android/.gradle/7.4/checksums/checksums.lock +0 -0
  34. package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
  35. package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
  36. package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
  37. package/android/.gradle/7.4/dependencies-accessors/gc.properties +0 -0
  38. package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
  39. package/android/.gradle/7.4/fileChanges/last-build.bin +0 -0
  40. package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
  41. package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
  42. package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
  43. package/android/.gradle/7.4/gc.properties +0 -0
  44. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  45. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  46. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  47. package/android/.gradle/vcs-1/gc.properties +0 -0
  48. package/android/.idea/compiler.xml +0 -6
  49. package/android/.idea/gradle.xml +0 -19
  50. package/android/.idea/jarRepositories.xml +0 -35
  51. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +0 -16
  52. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +0 -11
  53. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +0 -13
  54. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +0 -16
  55. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +0 -13
  56. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
  57. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
  58. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
  59. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
  60. package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +0 -16
  61. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
  62. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
  63. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
  64. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +0 -16
  65. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
  66. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +0 -11
  67. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -13
  68. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
  69. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +0 -13
  70. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
  71. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
  72. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
  73. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
  74. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
  75. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
  76. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
  77. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +0 -13
  78. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
  79. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +0 -13
  80. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
  81. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
  82. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
  83. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
  84. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
  85. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
  86. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
  87. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
  88. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
  89. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
  90. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
  91. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
  92. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
  93. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
  94. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_70_6_debug_aar.xml +0 -14
  95. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +0 -13
  96. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +0 -13
  97. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +0 -15
  98. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
  99. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
  100. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +0 -13
  101. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +0 -13
  102. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
  103. package/android/.idea/libraries/Gradle__com_umeng_umsdk_qt_px_common_1_4_0_PX_aar.xml +0 -11
  104. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
  105. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
  106. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
  107. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +0 -13
  108. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +0 -13
  109. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +0 -13
  110. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +0 -13
  111. package/android/.idea/misc.xml +0 -9
  112. package/android/.idea/modules/android.iml +0 -104
  113. package/android/.idea/modules.xml +0 -8
  114. package/android/.idea/vcs.xml +0 -6
  115. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  116. package/android/gradle/wrapper/gradle-wrapper.properties +0 -5
  117. package/android/gradlew +0 -234
  118. package/android/gradlew.bat +0 -89
  119. package/android/local.properties +0 -8
  120. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QTSDKManager.java +0 -93
  121. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QuicktrackingAnalyticsModule.java +0 -242
  122. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QuicktrackingAnalyticsModulePackage.java +0 -28
  123. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/property/QTViewProperties.java +0 -48
  124. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/QTLog.java +0 -122
  125. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNPropertyManager.java +0 -29
  126. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNTouchTargetHelper.java +0 -139
  127. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNUtils.java +0 -188
  128. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNViewUtils.java +0 -148
  129. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.pbxproj +0 -324
  130. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  131. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  132. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/xcuserdata/yuzhao.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  133. package/ios/QuicktrackingAnalyticsModule.xcodeproj/xcuserdata/yuzhao.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  134. package/ios/QuicktrackingAnalyticsModule.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  135. package/react-native-quicktracking-analytics-module.podspec +0 -37
@@ -0,0 +1,564 @@
1
+ #! node option
2
+ // 系统变量
3
+ "use strict";
4
+
5
+ const path = require('path');
6
+ const fs = require('fs');
7
+ const packageJSON = require('../../../package.json');
8
+ const dir = path.resolve(__dirname, '../../');
9
+ const ChartSet_UTF8 = 'utf8';
10
+ const QTHookTag = 'QUICKTRACKING HOOK';
11
+ const QTBackUpSuffix = '_quicktracking_backup';
12
+
13
+ // 工具函数- add try catch
14
+ function addTryCatch(functionBody) {
15
+ functionBody = functionBody.replace(/this/g, 'thatThis');
16
+ return '(function(thatThis){\n' + ' try{\n ' + functionBody + " \n } catch (error) { throw new Error('QUICKTRACKING RN Hook Code 调用异常: ' + error);}\n" + '})(this); /* QUICKTRACKING HOOK */';
17
+ }
18
+
19
+ // 工具函数 - 计算位置
20
+ function lastArgumentName(content, index) {
21
+ --index;
22
+ const lastComma = content.lastIndexOf(',', index);
23
+ const lastParentheses = content.lastIndexOf('(', index);
24
+ const start = Math.max(lastComma, lastParentheses);
25
+ return content.substring(start + 1, index + 1);
26
+ }
27
+
28
+ // 自动PV开关
29
+ let enableAutoCLK = false;
30
+ if (packageJSON && packageJSON.QTSDKConfig) {
31
+ enableAutoCLK = !!packageJSON.QTSDKConfig.enableAutoCLK;
32
+ }
33
+
34
+ // react native clickable component path
35
+ const RNClickTouchableFilePath = dir + '/react-native/Libraries/Components/Touchable/Touchable.js'; //原RNClickFilePath
36
+ const RNClickPressabilityFilePath = dir + '/react-native/Libraries/Pressability/Pressability.js';
37
+ const RNClickableFiles = [dir + '/react-native/Libraries/Renderer/src/renderers/native/ReactNativeFiber.js', dir + '/react-native/Libraries/Renderer/src/renderers/native/ReactNativeFiber-dev.js', dir + '/react-native/Libraries/Renderer/src/renderers/native/ReactNativeFiber-prod.js', dir + '/react-native/Libraries/Renderer/src/renderers/native/ReactNativeFiber-profiling.js', dir + '/react-native/Libraries/Renderer/ReactNativeFiber-dev.js', dir + '/react-native/Libraries/Renderer/ReactNativeFiber-prod.js', dir + '/react-native/Libraries/Renderer/oss/ReactNativeRenderer-dev.js', dir + '/react-native/Libraries/Renderer/oss/ReactNativeRenderer-prod.js', dir + '/react-native/Libraries/Renderer/ReactNativeStack-dev.js', dir + '/react-native/Libraries/Renderer/ReactNativeStack-prod.js', dir + '/react-native/Libraries/Renderer/oss/ReactNativeRenderer-profiling.js', dir + '/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js', dir + '/react-native/Libraries/Renderer/ReactNativeRenderer-prod.js', dir + '/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js', dir + '/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js', dir + '/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js'];
38
+
39
+ // react native slider files path
40
+ const RNSliderFiles = [dir + '/react-native/Libraries/Components/Slider/Slider.js', dir + '/react-native/Libraries/Components/Slider/Slider.js', dir + '/@react-native-community/slider/js/Slider.js', dir + '/@react-native-community/slider/dist/Slider.js', dir + '/@react-native-community/js/Slider.js', dir + '/@react-native-community/src/js/Slider.js'];
41
+
42
+ // react native switch files path
43
+ const RNSwitchFiles = [dir + '/react-native/Libraries/Components/Switch/Switch.js'];
44
+
45
+ // react native segmentedControl files path
46
+ const RNSegmentedControlFilePath = [dir + '/react-native/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js', dir + '/@react-native-community/segmented-control/js/SegmentedControl.ios.js'];
47
+
48
+ // react native gestureButtons files path
49
+ const RNGestureButtonsFilePaths = [dir + '/react-native-gesture-handler/GestureButtons.js', dir + '/react-native-gesture-handler/src/components/GestureButtons.tsx'];
50
+ const QTClickTouchableHookCode = `(function(thatThis) {
51
+ try {
52
+ const ReactNative = require('react-native');
53
+ const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;
54
+ thatThis.props.onPress && qtModule && qtModule?.onEventAutoCLK(ReactNative.findNodeHandle(thatThis));
55
+ } catch (error) {
56
+ throw new Error('QuickTracking RN Hook Code 调用异常: ' + error);
57
+ }
58
+ })(this)
59
+ /* QUICKTRACKING HOOK */ `;
60
+ const QTClickPressabilityHookCode = `const tag = event.currentTarget && event.currentTarget._nativeTag ? event.currentTarget._nativeTag:event.currentTarget;
61
+ (function(thatThis, e, that){
62
+ if(thatThis){
63
+ try {
64
+ const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;
65
+ qtModule && qtModule?.onEventAutoCLK(thatThis);
66
+ }catch (error){
67
+ throw new Error('QuickTracking RN Hook Code 调用异常:' + error);
68
+ }
69
+ }
70
+ })(tag, event, this); /* QUICKTRACKING HOOK */ `;
71
+ // iOS 全埋点已覆盖
72
+ const QTSliderHookCode = '(function(thatThis){\n' + ' try {\n' + " const ReactNative = require('react-native');\n" + ' const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;\n' + ' qtModule && qtModule?.onEventAutoCLK(event.nativeEvent.target);\n' + ' } catch (error) { \n' + " throw new Error('QUICKTRACKING RN Hook Code 调用异常: ' + error);\n" + ' }\n' + '})(this); /* QUICKTRACKING HOOK */';
73
+ // iOS 全埋点覆盖
74
+ const QTSegmentedControlHookCode = 'if(this.props.onChange != null || this.props.onValueChange != null){\n' + '(function(thatThis){\n' + ' try {\n' + " const ReactNative = require('react-native');\n" + ' const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;\n' + ' qtModule && qtModule?.onEventAutoCLK(event.nativeEvent.target);\n' + ' } catch (error) { \n' + " throw new Error('QUICKTRACKING RN Hook Code 调用异常: ' + error);}\n" + '})(this); /* QUICKTRACKING HOOK */}';
75
+ // iOS 全埋点已覆盖
76
+ const QTSwitchHookCode = `if(this.props.onChange != null || this.props.onValueChange != null){
77
+ (function(thatThis){
78
+ try {
79
+ const ReactNative = require('react-native');
80
+ const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;
81
+ qtModule && qtModule?.onEventAutoCLK(ReactNative.findNodeHandle(thatThis));
82
+ } catch (error) {
83
+ throw new Error('QUICKTRACKING RN Hook Code 调用异常: ' + error);
84
+ }
85
+ })(this);
86
+ /* QUICKTRACKING HOOK */}`;
87
+ // iOS 已覆盖
88
+ const QTSwitchHookCode66 = `if(nativeSwitchRef.current && onValueChange){
89
+ (function(thatThis){
90
+ try {
91
+ const ReactNative = require(react-native);
92
+ const qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;
93
+ qtModule && qtModule?.onEventAutoCLK(ReactNative.findNodeHandle(nativeSwitchRef.current));
94
+ } catch (error) {
95
+ throw new Error('QUICKTRACKING RN Hook Code 调用异常:' + error);
96
+ }
97
+ })(this); /* QUICKTRACKING HOOK */}`;
98
+
99
+ // import ReactNative if need
100
+ const QTImportReactNativeHookCode = "import ReactNative from 'react-native';\n";
101
+
102
+ // hook Touchable.js
103
+ function QTTouchableHookRN() {
104
+ if (fs.existsSync(RNClickTouchableFilePath)) {
105
+ // read file content
106
+ let fileContent = fs.readFileSync(RNClickTouchableFilePath, ChartSet_UTF8);
107
+ // already hook, pass
108
+ if (fileContent.indexOf(QTHookTag) > -1) {
109
+ return;
110
+ }
111
+ console.log(`found Touchable.js: ${RNClickTouchableFilePath}`);
112
+ // get position of the injected code
113
+ const hookIndex = fileContent.indexOf('this.touchableHandlePress(');
114
+ // if method of touchableHandlePress not exist, throw exception
115
+ if (hookIndex === -1) {
116
+ throw "Can't not find touchableHandlePress function";
117
+ }
118
+ const injectedContent = `${fileContent.substring(0, hookIndex)}\n${QTClickTouchableHookCode}\n${fileContent.substring(hookIndex)}`;
119
+
120
+ // backup original Touchable.js file
121
+ fs.renameSync(RNClickTouchableFilePath, `${RNClickTouchableFilePath}${QTBackUpSuffix}`);
122
+
123
+ // rewrite Touchable.js file
124
+ fs.writeFileSync(RNClickTouchableFilePath, injectedContent, ChartSet_UTF8);
125
+ console.log(`modify Touchable.js succeed`);
126
+ }
127
+ }
128
+
129
+ // hook 0.62\0.63 Pressable click
130
+ function QTPressableHookRN() {
131
+ if (fs.existsSync(RNClickPressabilityFilePath)) {
132
+ // read file content
133
+ var fileContent = fs.readFileSync(RNClickPressabilityFilePath, 'utf8');
134
+ // already hook, pass
135
+ if (fileContent.indexOf(QTHookTag) > -1) {
136
+ return;
137
+ }
138
+ console.log(`found Pressability.js: ${RNClickPressabilityFilePath}`);
139
+ // get position of the injected code
140
+ var scriptStr = 'onPress(event);';
141
+ var hookIndex = fileContent.lastIndexOf(scriptStr);
142
+ // if method of onPress not exist, throw exception
143
+
144
+ if (hookIndex === -1) {
145
+ throw "Can't not find onPress(event); code";
146
+ }
147
+ var hookedContent = `${fileContent.substring(0, hookIndex)}\n${QTClickPressabilityHookCode}\n${fileContent.substring(hookIndex)}`;
148
+ // backup original Pressability.js file
149
+ if (fileContent.indexOf(`${QTImportReactNativeHookCode}`) === -1) {
150
+ hookedContent = QTImportReactNativeHookCode + hookedContent;
151
+ }
152
+ fs.renameSync(RNClickPressabilityFilePath, `${RNClickPressabilityFilePath}${QTBackUpSuffix}`);
153
+ // rewrite Pressability.js file
154
+ fs.writeFileSync(RNClickPressabilityFilePath, hookedContent, ChartSet_UTF8);
155
+ console.log(`modify Pressability.js succeed`);
156
+ }
157
+ }
158
+
159
+ // hook slider
160
+ function QTHookSliderRN(reset = false) {
161
+ RNSliderFiles.forEach(function (onefile) {
162
+ if (fs.existsSync(onefile)) {
163
+ // 读取文件内容
164
+ const fileContent = fs.readFileSync(onefile, ChartSet_UTF8);
165
+ if (reset) {
166
+ // 未被 hook 过代码,不需要处理
167
+ if (fileContent.indexOf(QTHookTag) === -1) {
168
+ return;
169
+ }
170
+ // 检查备份文件是否存在
171
+ const backFilePath = `${onefile}${QTBackUpSuffix}`;
172
+ if (!fs.existsSync(backFilePath)) {
173
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
174
+ }
175
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名文件
176
+ fs.renameSync(backFilePath, onefile);
177
+ console.log(`found and reset Slider.js: ${onefile}`);
178
+ } else {
179
+ // 已经 hook 过了,不需要再次 hook
180
+ if (fileContent.indexOf(QTHookTag) > -1) {
181
+ return;
182
+ }
183
+ console.log(`found Slider.js: ${onefile}`);
184
+ // 获取 hook 的代码插入的位置
185
+ const scriptStr = 'onSlidingComplete(event.nativeEvent.value);';
186
+ const hookIndex = fileContent.indexOf(scriptStr);
187
+ // 判断文件是否异常,不存在 touchableHandlePress 方法,导致无法 hook 点击事件
188
+ if (hookIndex === -1) {
189
+ throw "Can't not find onSlidingComplete function";
190
+ }
191
+ // 插入 hook 代码
192
+ const hookedContent = `${fileContent.substring(0, hookIndex + scriptStr.length)}\n${QTSliderHookCode}\n${fileContent.substring(hookIndex + scriptStr.length)}`;
193
+ // 备份源文件
194
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
195
+ // 重写文件
196
+ fs.writeFileSync(onefile, hookedContent, ChartSet_UTF8);
197
+ console.log(`modify Slider.js succeed`);
198
+ }
199
+ }
200
+ });
201
+ }
202
+ // hook switch
203
+ function QTHookSwitchRN(reset = false) {
204
+ RNSwitchFiles.forEach(function (onefile) {
205
+ if (fs.existsSync(onefile)) {
206
+ // 读取文件内容
207
+ const fileContent = fs.readFileSync(onefile, 'utf8');
208
+ if (reset) {
209
+ // 未被 hook 过代码,不需要处理
210
+ if (fileContent.indexOf(`${QTHookTag}`) === -1) {
211
+ return;
212
+ }
213
+ // 检查备份文件是否存在
214
+ const backFilePath = `${onefile}${QTBackUpSuffix}`;
215
+ if (!fs.existsSync(backFilePath)) {
216
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
217
+ }
218
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名文件
219
+ fs.renameSync(backFilePath, onefile);
220
+ console.log(`found and reset Switch.js: ${onefile}`);
221
+ } else {
222
+ // 已经 hook 过了,不需要再次 hook
223
+ if (fileContent.indexOf(`${QTHookTag}`) > -1) {
224
+ return;
225
+ }
226
+ console.log(`found Switch.js: ${onefile}`);
227
+ // 特殊情况的单独插入
228
+ // if (this.props.onValueChange != null) {
229
+ let scriptStr = 'if (this.props.onValueChange != null) {';
230
+ let hookIndex = fileContent.indexOf(scriptStr);
231
+ if (hookIndex > -1) {
232
+ // 插入 hook 代码
233
+ const hookedContent = `${fileContent.substring(0, hookIndex)}\n${QTSwitchHookCode}\n${fileContent.substring(hookIndex)}`;
234
+ // 备份源文件
235
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
236
+ // 重写文件
237
+ fs.writeFileSync(onefile, hookedContent, 'utf8');
238
+ console.log(`modify Switch.js: ${onefile}`);
239
+ } else {
240
+ // 获取 hook 的代码插入的位置
241
+ scriptStr = 'this.props.onValueChange(event.nativeEvent.value);';
242
+ hookIndex = fileContent.indexOf(scriptStr);
243
+ let hookcontent;
244
+ if (hookIndex === -1) {
245
+ scriptStr = 'onValueChange?.(event.nativeEvent.value);';
246
+ hookIndex = fileContent.indexOf(scriptStr);
247
+ hookcontent = QTSwitchHookCode66;
248
+ } else {
249
+ hookcontent = QTSwitchHookCode;
250
+ }
251
+ // 判断文件是否异常,不存在 touchableHandlePress 方法,导致无法 hook 点击事件
252
+ if (hookIndex === -1) {
253
+ throw "Can't not find onValueChange function";
254
+ }
255
+ // 插入 hook 代码
256
+ const hookedContent = `${fileContent.substring(0, hookIndex + scriptStr.length)}\n${hookcontent}\n${fileContent.substring(hookIndex + scriptStr.length)}`;
257
+ // 备份源文件
258
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
259
+ // 重写文件
260
+ fs.writeFileSync(onefile, hookedContent, 'utf8');
261
+ console.log(`modify Switch.js succeed`);
262
+ }
263
+ }
264
+ }
265
+ });
266
+ }
267
+ // hook SegmentedControl
268
+ function QTHookSegmentedControlRN(reset = false) {
269
+ RNSegmentedControlFilePath.forEach(function (onefile) {
270
+ if (fs.existsSync(onefile)) {
271
+ // 读取文件内容
272
+ const fileContent = fs.readFileSync(onefile, ChartSet_UTF8);
273
+ if (reset) {
274
+ // 未被 hook 过代码,不需要处理
275
+ if (fileContent.indexOf(`${QTHookTag}`) === -1) {
276
+ return;
277
+ }
278
+ // 检查备份文件是否存在
279
+ const backFilePath = `${onefile}${QTBackUpSuffix}`;
280
+ if (!fs.existsSync(backFilePath)) {
281
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
282
+ }
283
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名文件
284
+ fs.renameSync(backFilePath, onefile);
285
+ console.log(`found and reset SegmentedControl.js: ${onefile}`);
286
+ } else {
287
+ // 已经 hook 过了,不需要再次 hook
288
+ if (fileContent.indexOf(`${QTHookTag}`) > -1) {
289
+ return;
290
+ }
291
+ console.log(`found SegmentedControl.js: ${onefile}`);
292
+ // 获取 hook 的代码插入的位置
293
+ const scriptStr = 'this.props.onValueChange(event.nativeEvent.value);';
294
+ const hookIndex = fileContent.indexOf(scriptStr);
295
+ // 判断文件是否异常,不存在 touchableHandlePress 方法,导致无法 hook 点击事件
296
+ if (hookIndex === -1) {
297
+ throw "Can't not find onValueChange function";
298
+ }
299
+ // 插入 hook 代码
300
+ const hookedContent = `${fileContent.substring(0, hookIndex + scriptStr.length)}\n${QTSegmentedControlHookCode}\n${fileContent.substring(hookIndex + scriptStr.length)}`;
301
+ // 备份 Touchable.js 源文件
302
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
303
+ // 重写 Touchable.js 文件
304
+ fs.writeFileSync(onefile, hookedContent, ChartSet_UTF8);
305
+ console.log(`modify SegmentedControl.js succeed`);
306
+ }
307
+ }
308
+ });
309
+ }
310
+
311
+ // hook GestureButtons
312
+ function QTHookGestureButtonsRN(reset = false) {
313
+ RNGestureButtonsFilePaths.forEach(function (onefile) {
314
+ if (fs.existsSync(onefile)) {
315
+ // 读取文件内容
316
+ const fileContent = fs.readFileSync(onefile, ChartSet_UTF8);
317
+ if (reset) {
318
+ // 未被 hook 过代码,不需要处理
319
+ if (fileContent.indexOf(`${QTHookTag}`) === -1) {
320
+ return;
321
+ }
322
+ // 检查备份文件是否存在
323
+ const backFilePath = `${onefile}${QTBackUpSuffix}`;
324
+ if (!fs.existsSync(backFilePath)) {
325
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
326
+ }
327
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名文件
328
+ fs.renameSync(backFilePath, onefile);
329
+ console.log(`found and reset GestureButtons: ${onefile}`);
330
+ } else {
331
+ // 已经 hook 过了,不需要再次 hook
332
+ if (fileContent.indexOf(`${QTHookTag}`) > -1) {
333
+ return;
334
+ }
335
+ console.log(`found GestureButtons: ${onefile}`);
336
+ // 获取 hook 的代码插入的位置
337
+ const scriptStr = 'this.props.onPress(active);';
338
+ const hookIndex = fileContent.indexOf(scriptStr);
339
+ // 判断文件是否异常,不存在 this.props.onPress(active); 导致无法 hook 点击事件
340
+ if (hookIndex === -1) {
341
+ throw "Can't not find this.props.onPress(active); ";
342
+ }
343
+ // 插入 hook 代码
344
+ const hookedContent = `${fileContent.substring(0, hookIndex + scriptStr.length)}\n${QTClickTouchableHookCode}\n${fileContent.substring(hookIndex + scriptStr.length)}`;
345
+ // 备份目标源文件
346
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
347
+ // 重写修改后的文件
348
+ fs.writeFileSync(onefile, hookedContent, ChartSet_UTF8);
349
+ console.log(`modify GestureButtons succeed`);
350
+ }
351
+ }
352
+ });
353
+ }
354
+
355
+ // hook clickable
356
+ function QTHookClickableRN(reset = false) {
357
+ RNClickableFiles.forEach(function (onefile) {
358
+ if (fs.existsSync(onefile)) {
359
+ if (reset) {
360
+ // 读取文件内容
361
+ const fileContent = fs.readFileSync(onefile, ChartSet_UTF8);
362
+ // 未被 hook 过代码,不需要处理
363
+ if (fileContent.indexOf(`${QTHookTag}`) === -1) {
364
+ return;
365
+ }
366
+ // 检查备份文件是否存在
367
+ const backFilePath = `${onefile}${QTBackUpSuffix}`;
368
+ if (!fs.existsSync(backFilePath)) {
369
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
370
+ }
371
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名文件
372
+ fs.renameSync(backFilePath, onefile);
373
+ console.log(`found and reset clickable: ${onefile}`);
374
+ } else {
375
+ // 读取文件内容
376
+ const content = fs.readFileSync(onefile, 'utf8');
377
+ // 已经 hook 过了,不需要再次 hook
378
+ if (content.indexOf(`${QTHookTag}`) > -1) {
379
+ return;
380
+ }
381
+ console.log(`found clickable.js: ${onefile}`);
382
+ // 获取 hook 的代码插入的位置
383
+ let objRe = /ReactNativePrivateInterface\.UIManager\.createView\([\s\S]{1,60}\.uiViewClassName,[\s\S]*?\)[,;]/;
384
+ let match = objRe.exec(content);
385
+ if (!match) {
386
+ objRe = /UIManager\.createView\([\s\S]{1,60}\.uiViewClassName,[\s\S]*?\)[,;]/;
387
+ match = objRe.exec(content);
388
+ }
389
+ if (!match) {
390
+ throw "can't inject clickable js";
391
+ }
392
+ const lastParentheses = content.lastIndexOf(')', match.index);
393
+ const nextCommaIndex = content.indexOf(',', match.index);
394
+ if (nextCommaIndex === -1) throw "can't inject clickable js, and nextCommaIndex is -1";
395
+ const tagName = lastArgumentName(content, nextCommaIndex).trim();
396
+ const functionBody = `
397
+ var qtElement;
398
+ if(typeof internalInstanceHandle !== 'undefined') {
399
+ qtElement = internalInstanceHandle;
400
+ } else if(typeof workInProgress !== 'undefined') {
401
+ qtElement = workInProgress;
402
+ } else if(typeof thatThis._currentElement !== 'undefined') {
403
+ qtElement = thatThis._currentElement;
404
+ }
405
+ var eachProgress = function (workInProgress) {
406
+ if(workInProgress == null){
407
+ return;
408
+ }
409
+ var props;
410
+ if(workInProgress.memoizedProps) {
411
+ props = workInProgress.memoizedProps;
412
+ } else if(workInProgress.props){
413
+ props = workInProgress.props;
414
+ }
415
+ if(props && props.qtParams) {
416
+ return props.qtParams;
417
+ } else {
418
+ if(!props ||
419
+ !workInProgress.type ||
420
+ workInProgress.type.displayName === 'TouchableOpacity' ||
421
+ workInProgress.type.displayName === 'TouchableHighlight' ||
422
+ workInProgress.type.displayName === 'TouchableWithoutFeedback'||
423
+ workInProgress.type.displayName === 'TouchableNativeFeedback'||
424
+ workInProgress.type.displayName === 'Pressable'||
425
+ workInProgress.type.name === 'TouchableOpacity' ||
426
+ workInProgress.type.name === 'TouchableHighlight' ||
427
+ workInProgress.type.name === 'TouchableNativeFeedback'||
428
+ workInProgress.type.name === 'TouchableWithoutFeedback'||
429
+ workInProgress.type.displayName === undefined||
430
+ workInProgress.type.name === undefined ||
431
+ !props.onPress
432
+ ) {
433
+ if(workInProgress.return) {
434
+ return eachProgress(workInProgress.return);
435
+ } else {
436
+ if(workInProgress._owner && workInProgress._owner._currentElement) {
437
+ return eachProgress(workInProgress._owner._currentElement);
438
+ } else {
439
+ return eachProgress(workInProgress._owner);
440
+ }
441
+ }
442
+ }
443
+ }
444
+ };
445
+ var elementProps;
446
+ if(qtElement && qtElement.memoizedProps) {
447
+ elementProps = qtElement.memoizedProps;
448
+ } else if(qtElement && qtElement.props) {
449
+ elementProps = qtElement.props;
450
+ }
451
+ if(elementProps) {
452
+ // iOS 兼容 SegmentedControl 逻辑
453
+ var isSegmentedControl = (
454
+ qtElement && (
455
+ qtElement.type === 'RNCSegmentedControl' ||
456
+ qtElement.type === 'RCTSegmentedControl' ||
457
+ qtElement.type.name === 'RNCSegmentedControl' ||
458
+ qtElement.type.name === 'RCTSegmentedControl' ||
459
+ qtElement.type.displayName === 'RNCSegmentedControl' ||
460
+ qtElement.type.displayName === 'RCTSegmentedControl'
461
+ )
462
+ );
463
+ if(elementProps.onStartShouldSetResponder || isSegmentedControl) {
464
+ var qtProps = eachProgress(qtElement);
465
+ var ReactNative = require('react-native');
466
+
467
+ var qtModule = ReactNative.NativeModules.QuicktrackingAnalyticsModule;
468
+ if(qtModule && qtModule.saveRootViewProperties) {
469
+ var qtRootTag;
470
+ if(typeof nativeTopRootTag !== 'undefined') {
471
+ qtRootTag = nativeTopRootTag;
472
+ } else if(typeof rootContainerInstance !== 'undefined') {
473
+ qtRootTag = rootContainerInstance;
474
+ } else if(typeof renderExpirationTime !== 'undefined') {
475
+ qtRootTag = renderExpirationTime;
476
+ } else if(typeof renderLanes !== 'undefined') {
477
+ qtRootTag = renderLanes;
478
+ }
479
+ if (qtRootTag && (typeof qtRootTag === 'number')) {
480
+ qtModule.saveRootViewProperties(${tagName}, true , qtProps, qtRootTag);
481
+ return;
482
+ }
483
+ }
484
+ qtModule && qtModule.saveViewProperties && qtModule.saveViewProperties(${tagName}, true, qtProps);
485
+ }
486
+ }`;
487
+ const call = addTryCatch(functionBody);
488
+ const lastReturn = content.lastIndexOf('return', match.index);
489
+ let splitIndex = match.index;
490
+ if (lastReturn > lastParentheses) {
491
+ splitIndex = lastReturn;
492
+ }
493
+ const hookedContent = `${content.substring(0, splitIndex)}\n${call}\n${content.substring(splitIndex)}`;
494
+
495
+ // 备份源文件
496
+ fs.renameSync(onefile, `${onefile}${QTBackUpSuffix}`);
497
+ // 重写文件
498
+ fs.writeFileSync(onefile, hookedContent, ChartSet_UTF8);
499
+ console.log(`modify clickable.js succeed`);
500
+ }
501
+ }
502
+ });
503
+ }
504
+ function resetQTHookCodeRN(resetFilePath) {
505
+ // 判断需要被恢复的文件是否存在
506
+ if (!fs.existsSync(resetFilePath)) {
507
+ return;
508
+ }
509
+ const fileContent = fs.readFileSync(resetFilePath, 'utf8');
510
+ // 未被 hook 过代码,不需要处理
511
+ if (fileContent.indexOf(`${QTHookTag}`) === -1) {
512
+ return;
513
+ }
514
+ // 检查备份文件是否存在
515
+ const backFilePath = `${resetFilePath}${QTBackUpSuffix}`;
516
+ if (!fs.existsSync(backFilePath)) {
517
+ throw `File: ${backFilePath} not found, Please rm -rf node_modules and npm install again`;
518
+ }
519
+ // 将备份文件重命名恢复 + 自动覆盖被 hook 过的同名 Touchable.js 文件
520
+ fs.renameSync(backFilePath, resetFilePath);
521
+ console.log(`found and reset file: ${resetFilePath}`);
522
+ }
523
+
524
+ // hook all auto click event entry
525
+ function QTHookClickEventRN() {
526
+ QTTouchableHookRN(RNClickTouchableFilePath);
527
+ QTHookClickableRN();
528
+ QTHookSliderRN();
529
+ QTHookSegmentedControlRN();
530
+ QTHookGestureButtonsRN();
531
+ QTPressableHookRN();
532
+ }
533
+ function resetAllQTHookFiles() {
534
+ resetQTHookCodeRN(RNClickTouchableFilePath);
535
+ QTHookClickableRN(true);
536
+ QTHookSliderRN(true);
537
+ QTHookSwitchRN(true);
538
+ QTHookSegmentedControlRN(true);
539
+ QTHookGestureButtonsRN(true);
540
+ resetQTHookCodeRN(RNClickPressabilityFilePath);
541
+ }
542
+
543
+ // hook all files entry
544
+ function QTHookAllFiles() {
545
+ if (!enableAutoCLK) {
546
+ console.log('customers ignore auto click event');
547
+ } else {
548
+ QTHookClickEventRN();
549
+ }
550
+ }
551
+
552
+ // 命令行
553
+ switch (process.argv[2]) {
554
+ case '-run':
555
+ resetAllQTHookFiles();
556
+ QTHookAllFiles();
557
+ break;
558
+ case '-reset':
559
+ resetAllQTHookFiles();
560
+ break;
561
+ default:
562
+ console.log('can not find this options: ' + process.argv[2]);
563
+ }
564
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["path","require","fs","packageJSON","dir","resolve","__dirname","ChartSet_UTF8","QTHookTag","QTBackUpSuffix","addTryCatch","functionBody","replace","lastArgumentName","content","index","lastComma","lastIndexOf","lastParentheses","start","Math","max","substring","enableAutoCLK","QTSDKConfig","RNClickTouchableFilePath","RNClickPressabilityFilePath","RNClickableFiles","RNSliderFiles","RNSwitchFiles","RNSegmentedControlFilePath","RNGestureButtonsFilePaths","QTClickTouchableHookCode","QTClickPressabilityHookCode","QTSliderHookCode","QTSegmentedControlHookCode","QTSwitchHookCode","QTSwitchHookCode66","QTImportReactNativeHookCode","QTTouchableHookRN","existsSync","fileContent","readFileSync","indexOf","console","log","hookIndex","injectedContent","renameSync","writeFileSync","QTPressableHookRN","scriptStr","hookedContent","QTHookSliderRN","reset","forEach","onefile","backFilePath","length","QTHookSwitchRN","hookcontent","QTHookSegmentedControlRN","QTHookGestureButtonsRN","QTHookClickableRN","objRe","match","exec","nextCommaIndex","tagName","trim","call","lastReturn","splitIndex","resetQTHookCodeRN","resetFilePath","QTHookClickEventRN","resetAllQTHookFiles","QTHookAllFiles","process","argv"],"sourceRoot":"../../src","sources":["hook.js"],"mappings":"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GAAG,CAAC,CAAC,EAAE;UACxC;QACF;QACAoC,OAAO,CAACC,GAAG,CAAC,uBAAuBW,OAAO,EAAE,CAAC;QAC7C;QACA,IAAIQ,KAAK,GACP,kGAAkG;QACpG,IAAIC,KAAK,GAAGD,KAAK,CAACE,IAAI,CAACpD,OAAO,CAAC;QAC/B,IAAI,CAACmD,KAAK,EAAE;UACVD,KAAK,GACH,qEAAqE;UACvEC,KAAK,GAAGD,KAAK,CAACE,IAAI,CAACpD,OAAO,CAAC;QAC7B;QACA,IAAI,CAACmD,KAAK,EAAE;UACV,MAAM,2BAA2B;QACnC;QACA,MAAM/C,eAAe,GAAGJ,OAAO,CAACG,WAAW,CAAC,GAAG,EAAEgD,KAAK,CAAClD,KAAK,CAAC;QAC7D,MAAMoD,cAAc,GAAGrD,OAAO,CAAC6B,OAAO,CAAC,GAAG,EAAEsB,KAAK,CAAClD,KAAK,CAAC;QACxD,IAAIoD,cAAc,KAAK,CAAC,CAAC,EACvB,MAAM,qDAAqD;QAC7D,MAAMC,OAAO,GAAGvD,gBAAgB,CAACC,OAAO,EAAEqD,cAAc,CAAC,CAACE,IAAI,CAAC,CAAC;QAChE,MAAM1D,YAAY,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoDyD,OAAO;AAC3D;AACA;AACA;AACA,uFAAuFA,OAAO;AAC9F;AACA,UAAU;QACF,MAAME,IAAI,GAAG5D,WAAW,CAACC,YAAY,CAAC;QACtC,MAAM4D,UAAU,GAAGzD,OAAO,CAACG,WAAW,CAAC,QAAQ,EAAEgD,KAAK,CAAClD,KAAK,CAAC;QAC7D,IAAIyD,UAAU,GAAGP,KAAK,CAAClD,KAAK;QAC5B,IAAIwD,UAAU,GAAGrD,eAAe,EAAE;UAChCsD,UAAU,GAAGD,UAAU;QACzB;QACA,MAAMnB,aAAa,GAAG,GAAGtC,OAAO,CAACQ,SAAS,CACxC,CAAC,EACDkD,UACF,CAAC,KAAKF,IAAI,KAAKxD,OAAO,CAACQ,SAAS,CAACkD,UAAU,CAAC,EAAE;;QAE9C;QACAtE,EAAE,CAAC8C,UAAU,CAACQ,OAAO,EAAE,GAAGA,OAAO,GAAG/C,cAAc,EAAE,CAAC;QACrD;QACAP,EAAE,CAAC+C,aAAa,CAACO,OAAO,EAAEJ,aAAa,EAAE7C,aAAa,CAAC;QACvDqC,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC;MAC5C;IACF;EACF,CAAC,CAAC;AACJ;AAEA,SAAS4B,iBAAiBA,CAACC,aAAa,EAAE;EACxC;EACA,IAAI,CAACxE,EAAE,CAACsC,UAAU,CAACkC,aAAa,CAAC,EAAE;IACjC;EACF;EACA,MAAMjC,WAAW,GAAGvC,EAAE,CAACwC,YAAY,CAACgC,aAAa,EAAE,MAAM,CAAC;EAC1D;EACA,IAAIjC,WAAW,CAACE,OAAO,CAAC,GAAGnC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;IAC9C;EACF;EACA;EACA,MAAMiD,YAAY,GAAG,GAAGiB,aAAa,GAAGjE,cAAc,EAAE;EACxD,IAAI,CAACP,EAAE,CAACsC,UAAU,CAACiB,YAAY,CAAC,EAAE;IAChC,MAAM,SAASA,YAAY,8DAA8D;EAC3F;EACA;EACAvD,EAAE,CAAC8C,UAAU,CAACS,YAAY,EAAEiB,aAAa,CAAC;EAC1C9B,OAAO,CAACC,GAAG,CAAC,yBAAyB6B,aAAa,EAAE,CAAC;AACvD;;AAEA;AACA,SAASC,kBAAkBA,CAAA,EAAG;EAC5BpC,iBAAiB,CAACd,wBAAwB,CAAC;EAC3CsC,iBAAiB,CAAC,CAAC;EACnBV,cAAc,CAAC,CAAC;EAChBQ,wBAAwB,CAAC,CAAC;EAC1BC,sBAAsB,CAAC,CAAC;EACxBZ,iBAAiB,CAAC,CAAC;AACrB;AAEA,SAAS0B,mBAAmBA,CAAA,EAAG;EAC7BH,iBAAiB,CAAChD,wBAAwB,CAAC;EAE3CsC,iBAAiB,CAAC,IAAI,CAAC;EAEvBV,cAAc,CAAC,IAAI,CAAC;EACpBM,cAAc,CAAC,IAAI,CAAC;EACpBE,wBAAwB,CAAC,IAAI,CAAC;EAC9BC,sBAAsB,CAAC,IAAI,CAAC;EAE5BW,iBAAiB,CAAC/C,2BAA2B,CAAC;AAChD;;AAEA;AACA,SAASmD,cAAcA,CAAA,EAAG;EACxB,IAAI,CAACtD,aAAa,EAAE;IAClBqB,OAAO,CAACC,GAAG,CAAC,mCAAmC,CAAC;EAClD,CAAC,MAAM;IACL8B,kBAAkB,CAAC,CAAC;EACtB;AACF;;AAEA;AACA,QAAQG,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACrB,KAAK,MAAM;IACTH,mBAAmB,CAAC,CAAC;IACrBC,cAAc,CAAC,CAAC;IAChB;EACF,KAAK,QAAQ;IACXD,mBAAmB,CAAC,CAAC;IACrB;EACF;IACEhC,OAAO,CAACC,GAAG,CAAC,6BAA6B,GAAGiC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE","ignoreList":[]}