@salve-software/mako-react-native 1.0.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.
Files changed (323) hide show
  1. package/LICENSE +21 -0
  2. package/NitroMako.podspec +31 -0
  3. package/README.md +90 -0
  4. package/android/CMakeLists.txt +32 -0
  5. package/android/build.gradle +148 -0
  6. package/android/fix-prefab.gradle +51 -0
  7. package/android/gradle.properties +5 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  10. package/android/src/main/java/com/margelo/nitro/mako/HybridMako.kt +235 -0
  11. package/android/src/main/java/com/margelo/nitro/mako/MakoPackage.kt +18 -0
  12. package/android/src/main/java/com/margelo/nitro/mako/PerformanceMonitor.kt +260 -0
  13. package/ios/Bridge.h +8 -0
  14. package/ios/HybridMako.swift +245 -0
  15. package/ios/PerformanceMonitor.swift +223 -0
  16. package/lib/commonjs/index.js +17 -0
  17. package/lib/commonjs/index.js.map +1 -0
  18. package/lib/commonjs/library/client/constants.js +34 -0
  19. package/lib/commonjs/library/client/constants.js.map +1 -0
  20. package/lib/commonjs/library/client/index.js +28 -0
  21. package/lib/commonjs/library/client/index.js.map +1 -0
  22. package/lib/commonjs/library/client/mako-client.js +419 -0
  23. package/lib/commonjs/library/client/mako-client.js.map +1 -0
  24. package/lib/commonjs/library/component-handler/component-handler.js +158 -0
  25. package/lib/commonjs/library/component-handler/component-handler.js.map +1 -0
  26. package/lib/commonjs/library/component-handler/index.js +39 -0
  27. package/lib/commonjs/library/component-handler/index.js.map +1 -0
  28. package/lib/commonjs/library/component-handler/types.js +6 -0
  29. package/lib/commonjs/library/component-handler/types.js.map +1 -0
  30. package/lib/commonjs/library/component-handler/utils/index.js +26 -0
  31. package/lib/commonjs/library/component-handler/utils/index.js.map +1 -0
  32. package/lib/commonjs/library/device/device-handler.js +80 -0
  33. package/lib/commonjs/library/device/device-handler.js.map +1 -0
  34. package/lib/commonjs/library/device/index.js +9 -0
  35. package/lib/commonjs/library/device/index.js.map +1 -0
  36. package/lib/commonjs/library/device/types.js +2 -0
  37. package/lib/commonjs/library/device/types.js.map +1 -0
  38. package/lib/commonjs/library/device/utils/generate-uuid.js +14 -0
  39. package/lib/commonjs/library/device/utils/generate-uuid.js.map +1 -0
  40. package/lib/commonjs/library/index.js +156 -0
  41. package/lib/commonjs/library/index.js.map +1 -0
  42. package/lib/commonjs/library/interceptors/index.js +13 -0
  43. package/lib/commonjs/library/interceptors/index.js.map +1 -0
  44. package/lib/commonjs/library/interceptors/js-console.js +88 -0
  45. package/lib/commonjs/library/interceptors/js-console.js.map +1 -0
  46. package/lib/commonjs/library/interceptors/react-devtools.js +219 -0
  47. package/lib/commonjs/library/interceptors/react-devtools.js.map +1 -0
  48. package/lib/commonjs/library/interceptors/xhr.js +74 -0
  49. package/lib/commonjs/library/interceptors/xhr.js.map +1 -0
  50. package/lib/commonjs/library/network-handler/index.js +17 -0
  51. package/lib/commonjs/library/network-handler/index.js.map +1 -0
  52. package/lib/commonjs/library/network-handler/network-handler.js +103 -0
  53. package/lib/commonjs/library/network-handler/network-handler.js.map +1 -0
  54. package/lib/commonjs/library/network-handler/types.js +6 -0
  55. package/lib/commonjs/library/network-handler/types.js.map +1 -0
  56. package/lib/commonjs/library/network-handler/utils/generate-request-id.js +13 -0
  57. package/lib/commonjs/library/network-handler/utils/generate-request-id.js.map +1 -0
  58. package/lib/commonjs/library/network-handler/utils/index.js +41 -0
  59. package/lib/commonjs/library/network-handler/utils/index.js.map +1 -0
  60. package/lib/commonjs/library/network-handler/utils/parse-response-headers.js +26 -0
  61. package/lib/commonjs/library/network-handler/utils/parse-response-headers.js.map +1 -0
  62. package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js +18 -0
  63. package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js.map +1 -0
  64. package/lib/commonjs/library/network-handler/utils/response-to-string.js +35 -0
  65. package/lib/commonjs/library/network-handler/utils/response-to-string.js.map +1 -0
  66. package/lib/commonjs/library/network-handler/utils/should-ignore-url.js +13 -0
  67. package/lib/commonjs/library/network-handler/utils/should-ignore-url.js.map +1 -0
  68. package/lib/commonjs/library/performance-handler/index.js +13 -0
  69. package/lib/commonjs/library/performance-handler/index.js.map +1 -0
  70. package/lib/commonjs/library/performance-handler/performance-handler.js +94 -0
  71. package/lib/commonjs/library/performance-handler/performance-handler.js.map +1 -0
  72. package/lib/commonjs/library/performance-handler/types.js +6 -0
  73. package/lib/commonjs/library/performance-handler/types.js.map +1 -0
  74. package/lib/commonjs/library/project/index.js +15 -0
  75. package/lib/commonjs/library/project/index.js.map +1 -0
  76. package/lib/commonjs/library/project/project-handler.js +31 -0
  77. package/lib/commonjs/library/project/project-handler.js.map +1 -0
  78. package/lib/commonjs/library/types.js +2 -0
  79. package/lib/commonjs/library/types.js.map +1 -0
  80. package/lib/commonjs/package.json +1 -0
  81. package/lib/commonjs/specs/mako.nitro.js +6 -0
  82. package/lib/commonjs/specs/mako.nitro.js.map +1 -0
  83. package/lib/module/index.js +6 -0
  84. package/lib/module/index.js.map +1 -0
  85. package/lib/module/library/client/constants.js +30 -0
  86. package/lib/module/library/client/constants.js.map +1 -0
  87. package/lib/module/library/client/index.js +6 -0
  88. package/lib/module/library/client/index.js.map +1 -0
  89. package/lib/module/library/client/mako-client.js +415 -0
  90. package/lib/module/library/client/mako-client.js.map +1 -0
  91. package/lib/module/library/component-handler/component-handler.js +153 -0
  92. package/lib/module/library/component-handler/component-handler.js.map +1 -0
  93. package/lib/module/library/component-handler/index.js +6 -0
  94. package/lib/module/library/component-handler/index.js.map +1 -0
  95. package/lib/module/library/component-handler/types.js +4 -0
  96. package/lib/module/library/component-handler/types.js.map +1 -0
  97. package/lib/module/library/component-handler/utils/index.js +21 -0
  98. package/lib/module/library/component-handler/utils/index.js.map +1 -0
  99. package/lib/module/library/device/device-handler.js +75 -0
  100. package/lib/module/library/device/device-handler.js.map +1 -0
  101. package/lib/module/library/device/index.js +5 -0
  102. package/lib/module/library/device/index.js.map +1 -0
  103. package/lib/module/library/device/types.js +2 -0
  104. package/lib/module/library/device/types.js.map +1 -0
  105. package/lib/module/library/device/utils/generate-uuid.js +10 -0
  106. package/lib/module/library/device/utils/generate-uuid.js.map +1 -0
  107. package/lib/module/library/index.js +155 -0
  108. package/lib/module/library/index.js.map +1 -0
  109. package/lib/module/library/interceptors/index.js +9 -0
  110. package/lib/module/library/interceptors/index.js.map +1 -0
  111. package/lib/module/library/interceptors/js-console.js +83 -0
  112. package/lib/module/library/interceptors/js-console.js.map +1 -0
  113. package/lib/module/library/interceptors/react-devtools.js +214 -0
  114. package/lib/module/library/interceptors/react-devtools.js.map +1 -0
  115. package/lib/module/library/interceptors/xhr.js +69 -0
  116. package/lib/module/library/interceptors/xhr.js.map +1 -0
  117. package/lib/module/library/network-handler/index.js +4 -0
  118. package/lib/module/library/network-handler/index.js.map +1 -0
  119. package/lib/module/library/network-handler/network-handler.js +98 -0
  120. package/lib/module/library/network-handler/network-handler.js.map +1 -0
  121. package/lib/module/library/network-handler/types.js +4 -0
  122. package/lib/module/library/network-handler/types.js.map +1 -0
  123. package/lib/module/library/network-handler/utils/generate-request-id.js +9 -0
  124. package/lib/module/library/network-handler/utils/generate-request-id.js.map +1 -0
  125. package/lib/module/library/network-handler/utils/index.js +8 -0
  126. package/lib/module/library/network-handler/utils/index.js.map +1 -0
  127. package/lib/module/library/network-handler/utils/parse-response-headers.js +22 -0
  128. package/lib/module/library/network-handler/utils/parse-response-headers.js.map +1 -0
  129. package/lib/module/library/network-handler/utils/read-blob-as-text.js +14 -0
  130. package/lib/module/library/network-handler/utils/read-blob-as-text.js.map +1 -0
  131. package/lib/module/library/network-handler/utils/response-to-string.js +31 -0
  132. package/lib/module/library/network-handler/utils/response-to-string.js.map +1 -0
  133. package/lib/module/library/network-handler/utils/should-ignore-url.js +9 -0
  134. package/lib/module/library/network-handler/utils/should-ignore-url.js.map +1 -0
  135. package/lib/module/library/performance-handler/index.js +4 -0
  136. package/lib/module/library/performance-handler/index.js.map +1 -0
  137. package/lib/module/library/performance-handler/performance-handler.js +89 -0
  138. package/lib/module/library/performance-handler/performance-handler.js.map +1 -0
  139. package/lib/module/library/performance-handler/types.js +4 -0
  140. package/lib/module/library/performance-handler/types.js.map +1 -0
  141. package/lib/module/library/project/index.js +6 -0
  142. package/lib/module/library/project/index.js.map +1 -0
  143. package/lib/module/library/project/project-handler.js +26 -0
  144. package/lib/module/library/project/project-handler.js.map +1 -0
  145. package/lib/module/library/types.js +2 -0
  146. package/lib/module/library/types.js.map +1 -0
  147. package/lib/module/specs/mako.nitro.js +4 -0
  148. package/lib/module/specs/mako.nitro.js.map +1 -0
  149. package/lib/typescript/src/index.d.ts +4 -0
  150. package/lib/typescript/src/index.d.ts.map +1 -0
  151. package/lib/typescript/src/library/client/constants.d.ts +24 -0
  152. package/lib/typescript/src/library/client/constants.d.ts.map +1 -0
  153. package/lib/typescript/src/library/client/index.d.ts +4 -0
  154. package/lib/typescript/src/library/client/index.d.ts.map +1 -0
  155. package/lib/typescript/src/library/client/mako-client.d.ts +87 -0
  156. package/lib/typescript/src/library/client/mako-client.d.ts.map +1 -0
  157. package/lib/typescript/src/library/component-handler/component-handler.d.ts +21 -0
  158. package/lib/typescript/src/library/component-handler/component-handler.d.ts.map +1 -0
  159. package/lib/typescript/src/library/component-handler/index.d.ts +4 -0
  160. package/lib/typescript/src/library/component-handler/index.d.ts.map +1 -0
  161. package/lib/typescript/src/library/component-handler/types.d.ts +22 -0
  162. package/lib/typescript/src/library/component-handler/types.d.ts.map +1 -0
  163. package/lib/typescript/src/library/component-handler/utils/index.d.ts +13 -0
  164. package/lib/typescript/src/library/component-handler/utils/index.d.ts.map +1 -0
  165. package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts +2 -0
  166. package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts.map +1 -0
  167. package/lib/typescript/src/library/device/device-handler.d.ts +11 -0
  168. package/lib/typescript/src/library/device/device-handler.d.ts.map +1 -0
  169. package/lib/typescript/src/library/device/index.d.ts +3 -0
  170. package/lib/typescript/src/library/device/index.d.ts.map +1 -0
  171. package/lib/typescript/src/library/device/types.d.ts +8 -0
  172. package/lib/typescript/src/library/device/types.d.ts.map +1 -0
  173. package/lib/typescript/src/library/device/utils/generate-uuid.d.ts +2 -0
  174. package/lib/typescript/src/library/device/utils/generate-uuid.d.ts.map +1 -0
  175. package/lib/typescript/src/library/index.d.ts +120 -0
  176. package/lib/typescript/src/library/index.d.ts.map +1 -0
  177. package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts +2 -0
  178. package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts.map +1 -0
  179. package/lib/typescript/src/library/interceptors/__tests__/react-devtools.test.d.ts +2 -0
  180. package/lib/typescript/src/library/interceptors/__tests__/react-devtools.test.d.ts.map +1 -0
  181. package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts +2 -0
  182. package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts.map +1 -0
  183. package/lib/typescript/src/library/interceptors/index.d.ts +7 -0
  184. package/lib/typescript/src/library/interceptors/index.d.ts.map +1 -0
  185. package/lib/typescript/src/library/interceptors/js-console.d.ts +17 -0
  186. package/lib/typescript/src/library/interceptors/js-console.d.ts.map +1 -0
  187. package/lib/typescript/src/library/interceptors/react-devtools.d.ts +54 -0
  188. package/lib/typescript/src/library/interceptors/react-devtools.d.ts.map +1 -0
  189. package/lib/typescript/src/library/interceptors/xhr.d.ts +14 -0
  190. package/lib/typescript/src/library/interceptors/xhr.d.ts.map +1 -0
  191. package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts +2 -0
  192. package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts.map +1 -0
  193. package/lib/typescript/src/library/network-handler/index.d.ts +2 -0
  194. package/lib/typescript/src/library/network-handler/index.d.ts.map +1 -0
  195. package/lib/typescript/src/library/network-handler/network-handler.d.ts +19 -0
  196. package/lib/typescript/src/library/network-handler/network-handler.d.ts.map +1 -0
  197. package/lib/typescript/src/library/network-handler/types.d.ts +6 -0
  198. package/lib/typescript/src/library/network-handler/types.d.ts.map +1 -0
  199. package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts +2 -0
  200. package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts.map +1 -0
  201. package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts +2 -0
  202. package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts.map +1 -0
  203. package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts +2 -0
  204. package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts.map +1 -0
  205. package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts +2 -0
  206. package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts.map +1 -0
  207. package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts +2 -0
  208. package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts.map +1 -0
  209. package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts +5 -0
  210. package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts.map +1 -0
  211. package/lib/typescript/src/library/network-handler/utils/index.d.ts +6 -0
  212. package/lib/typescript/src/library/network-handler/utils/index.d.ts.map +1 -0
  213. package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts +5 -0
  214. package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts.map +1 -0
  215. package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts +5 -0
  216. package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts.map +1 -0
  217. package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts +5 -0
  218. package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts.map +1 -0
  219. package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts +5 -0
  220. package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts.map +1 -0
  221. package/lib/typescript/src/library/performance-handler/index.d.ts +3 -0
  222. package/lib/typescript/src/library/performance-handler/index.d.ts.map +1 -0
  223. package/lib/typescript/src/library/performance-handler/performance-handler.d.ts +27 -0
  224. package/lib/typescript/src/library/performance-handler/performance-handler.d.ts.map +1 -0
  225. package/lib/typescript/src/library/performance-handler/types.d.ts +20 -0
  226. package/lib/typescript/src/library/performance-handler/types.d.ts.map +1 -0
  227. package/lib/typescript/src/library/project/index.d.ts +4 -0
  228. package/lib/typescript/src/library/project/index.d.ts.map +1 -0
  229. package/lib/typescript/src/library/project/project-handler.d.ts +7 -0
  230. package/lib/typescript/src/library/project/project-handler.d.ts.map +1 -0
  231. package/lib/typescript/src/library/types.d.ts +41 -0
  232. package/lib/typescript/src/library/types.d.ts.map +1 -0
  233. package/lib/typescript/src/specs/mako.nitro.d.ts +100 -0
  234. package/lib/typescript/src/specs/mako.nitro.d.ts.map +1 -0
  235. package/nitro.json +24 -0
  236. package/nitrogen/generated/.gitattributes +1 -0
  237. package/nitrogen/generated/android/NitroMako+autolinking.cmake +81 -0
  238. package/nitrogen/generated/android/NitroMako+autolinking.gradle +27 -0
  239. package/nitrogen/generated/android/NitroMakoOnLoad.cpp +58 -0
  240. package/nitrogen/generated/android/NitroMakoOnLoad.hpp +34 -0
  241. package/nitrogen/generated/android/c++/JDeviceInfoResult.hpp +69 -0
  242. package/nitrogen/generated/android/c++/JFunc_void_NativeLogEntry.hpp +80 -0
  243. package/nitrogen/generated/android/c++/JFunc_void_PerformanceMetrics.hpp +77 -0
  244. package/nitrogen/generated/android/c++/JHybridNitroMakoSpec.cpp +124 -0
  245. package/nitrogen/generated/android/c++/JHybridNitroMakoSpec.hpp +74 -0
  246. package/nitrogen/generated/android/c++/JNativeLogEntry.hpp +71 -0
  247. package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +64 -0
  248. package/nitrogen/generated/android/c++/JPerformanceMetrics.hpp +69 -0
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/DeviceInfoResult.kt +47 -0
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/Func_void_NativeLogEntry.kt +80 -0
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/Func_void_PerformanceMetrics.kt +80 -0
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/HybridNitroMakoSpec.kt +108 -0
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NativeLogEntry.kt +47 -0
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NativeLogLevel.kt +25 -0
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NitroMakoOnLoad.kt +35 -0
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/PerformanceMetrics.kt +47 -0
  257. package/nitrogen/generated/ios/NitroMako+autolinking.rb +62 -0
  258. package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Bridge.cpp +49 -0
  259. package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Bridge.hpp +185 -0
  260. package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Umbrella.hpp +58 -0
  261. package/nitrogen/generated/ios/NitroMakoAutolinking.mm +33 -0
  262. package/nitrogen/generated/ios/NitroMakoAutolinking.swift +26 -0
  263. package/nitrogen/generated/ios/c++/HybridNitroMakoSpecSwift.cpp +11 -0
  264. package/nitrogen/generated/ios/c++/HybridNitroMakoSpecSwift.hpp +175 -0
  265. package/nitrogen/generated/ios/swift/DeviceInfoResult.swift +44 -0
  266. package/nitrogen/generated/ios/swift/Func_void_NativeLogEntry.swift +46 -0
  267. package/nitrogen/generated/ios/swift/Func_void_PerformanceMetrics.swift +46 -0
  268. package/nitrogen/generated/ios/swift/HybridNitroMakoSpec.swift +66 -0
  269. package/nitrogen/generated/ios/swift/HybridNitroMakoSpec_cxx.swift +289 -0
  270. package/nitrogen/generated/ios/swift/NativeLogEntry.swift +44 -0
  271. package/nitrogen/generated/ios/swift/NativeLogLevel.swift +48 -0
  272. package/nitrogen/generated/ios/swift/PerformanceMetrics.swift +44 -0
  273. package/nitrogen/generated/shared/c++/DeviceInfoResult.hpp +95 -0
  274. package/nitrogen/generated/shared/c++/HybridNitroMakoSpec.cpp +32 -0
  275. package/nitrogen/generated/shared/c++/HybridNitroMakoSpec.hpp +83 -0
  276. package/nitrogen/generated/shared/c++/NativeLogEntry.hpp +97 -0
  277. package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +84 -0
  278. package/nitrogen/generated/shared/c++/PerformanceMetrics.hpp +95 -0
  279. package/package.json +128 -0
  280. package/react-native.config.js +16 -0
  281. package/src/index.ts +7 -0
  282. package/src/library/client/constants.ts +36 -0
  283. package/src/library/client/index.ts +9 -0
  284. package/src/library/client/mako-client.ts +494 -0
  285. package/src/library/component-handler/component-handler.ts +162 -0
  286. package/src/library/component-handler/index.ts +3 -0
  287. package/src/library/component-handler/types.ts +24 -0
  288. package/src/library/component-handler/utils/index.ts +23 -0
  289. package/src/library/device/__tests__/device-handler.test.ts +86 -0
  290. package/src/library/device/device-handler.ts +85 -0
  291. package/src/library/device/index.ts +3 -0
  292. package/src/library/device/types.ts +7 -0
  293. package/src/library/device/utils/generate-uuid.ts +7 -0
  294. package/src/library/index.ts +183 -0
  295. package/src/library/interceptors/__tests__/js-console.test.ts +186 -0
  296. package/src/library/interceptors/__tests__/react-devtools.test.ts +848 -0
  297. package/src/library/interceptors/__tests__/xhr.test.ts +313 -0
  298. package/src/library/interceptors/index.ts +7 -0
  299. package/src/library/interceptors/js-console.ts +93 -0
  300. package/src/library/interceptors/react-devtools.ts +268 -0
  301. package/src/library/interceptors/xhr.ts +123 -0
  302. package/src/library/network-handler/__tests__/network-handler.test.ts +265 -0
  303. package/src/library/network-handler/index.ts +1 -0
  304. package/src/library/network-handler/network-handler.ts +141 -0
  305. package/src/library/network-handler/types.ts +6 -0
  306. package/src/library/network-handler/utils/__tests__/generate-request-id.test.ts +22 -0
  307. package/src/library/network-handler/utils/__tests__/parse-response-headers.test.ts +71 -0
  308. package/src/library/network-handler/utils/__tests__/read-blob-as-text.test.ts +79 -0
  309. package/src/library/network-handler/utils/__tests__/response-to-string.test.ts +85 -0
  310. package/src/library/network-handler/utils/__tests__/should-ignore-url.test.ts +45 -0
  311. package/src/library/network-handler/utils/generate-request-id.ts +6 -0
  312. package/src/library/network-handler/utils/index.ts +5 -0
  313. package/src/library/network-handler/utils/parse-response-headers.ts +20 -0
  314. package/src/library/network-handler/utils/read-blob-as-text.ts +11 -0
  315. package/src/library/network-handler/utils/response-to-string.ts +32 -0
  316. package/src/library/network-handler/utils/should-ignore-url.ts +6 -0
  317. package/src/library/performance-handler/index.ts +2 -0
  318. package/src/library/performance-handler/performance-handler.ts +104 -0
  319. package/src/library/performance-handler/types.ts +22 -0
  320. package/src/library/project/index.ts +4 -0
  321. package/src/library/project/project-handler.ts +28 -0
  322. package/src/library/types.ts +82 -0
  323. package/src/specs/mako.nitro.ts +114 -0
@@ -0,0 +1,123 @@
1
+ import type { NetworkCallbacks } from '../types';
2
+
3
+ export class XHRInterceptor {
4
+ private static instance: XHRInterceptor | null = null;
5
+
6
+ private readonly originalOpen = XMLHttpRequest.prototype.open;
7
+ private readonly originalSend = XMLHttpRequest.prototype.send;
8
+ private readonly originalSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
9
+
10
+ private enabled = false;
11
+
12
+ private callbacks: {
13
+ onOpen?: NetworkCallbacks['onOpen'];
14
+ onSend?: NetworkCallbacks['onSend'];
15
+ onRequestHeader?: NetworkCallbacks['onRequestHeader'];
16
+ onHeaderReceived?: NetworkCallbacks['onHeaderReceived'];
17
+ onResponse?: NetworkCallbacks['onResponse'];
18
+ } = {};
19
+
20
+ public static getInstance(): XHRInterceptor {
21
+ if (!XHRInterceptor.instance) {
22
+ XHRInterceptor.instance = new XHRInterceptor();
23
+ }
24
+
25
+ return XHRInterceptor.instance;
26
+ }
27
+
28
+ public isEnabled(): boolean {
29
+ return this.enabled;
30
+ }
31
+
32
+ public enable(callbacks: NetworkCallbacks): boolean {
33
+ if (this.enabled) {
34
+ console.warn('[Mako] Network interceptor already enabled');
35
+ return false;
36
+ }
37
+
38
+ this.callbacks = callbacks;
39
+
40
+ XMLHttpRequest.prototype.open = function (
41
+ this: XMLHttpRequest,
42
+ method: string,
43
+ url: string | URL
44
+ ) {
45
+ XHRInterceptor.getInstance().callbacks.onOpen?.(method, url.toString(), this);
46
+
47
+ return XHRInterceptor.getInstance().originalOpen.apply(this, arguments as any);
48
+ };
49
+
50
+ XMLHttpRequest.prototype.setRequestHeader = function (
51
+ this: XMLHttpRequest,
52
+ header: string,
53
+ value: string
54
+ ) {
55
+ XHRInterceptor.getInstance().callbacks.onRequestHeader?.(header, value, this);
56
+
57
+ return XHRInterceptor.getInstance().originalSetRequestHeader.apply(
58
+ this,
59
+ arguments as any
60
+ );
61
+ };
62
+
63
+ XMLHttpRequest.prototype.send = function (this: XMLHttpRequest, data?: unknown) {
64
+ const interceptor = XHRInterceptor.getInstance();
65
+
66
+ interceptor.callbacks.onSend?.(data, this);
67
+
68
+ if (this.addEventListener) {
69
+ this.addEventListener('readystatechange', () => {
70
+ if (!interceptor.enabled) {
71
+ return;
72
+ }
73
+
74
+ if (this.readyState === this.HEADERS_RECEIVED) {
75
+ const contentType = this.getResponseHeader('Content-Type');
76
+ const contentLength = this.getResponseHeader('Content-Length');
77
+
78
+ interceptor.callbacks.onHeaderReceived?.(
79
+ contentType?.split(';')[0],
80
+ contentLength ? parseInt(contentLength, 10) : undefined,
81
+ this.getAllResponseHeaders(),
82
+ this
83
+ );
84
+ }
85
+
86
+ if (this.readyState === this.DONE) {
87
+ interceptor.callbacks.onResponse?.(
88
+ this.status,
89
+ this.timeout > 0,
90
+ this.response,
91
+ this.responseURL,
92
+ this.responseType,
93
+ this
94
+ );
95
+ }
96
+ });
97
+ }
98
+
99
+ return interceptor.originalSend.apply(this, arguments as any);
100
+ };
101
+
102
+ this.enabled = true;
103
+
104
+ console.log('[Mako] Network interception enabled (XMLHttpRequest monkey-patch)');
105
+
106
+ return true;
107
+ }
108
+
109
+ public disable(): void {
110
+ if (!this.enabled) {
111
+ return;
112
+ }
113
+
114
+ XMLHttpRequest.prototype.open = this.originalOpen;
115
+ XMLHttpRequest.prototype.send = this.originalSend;
116
+ XMLHttpRequest.prototype.setRequestHeader = this.originalSetRequestHeader;
117
+
118
+ this.callbacks = {};
119
+ this.enabled = false;
120
+
121
+ console.log('[Mako] Network interception disabled');
122
+ }
123
+ }
@@ -0,0 +1,265 @@
1
+ import { NetworkHandler } from '../index';
2
+
3
+ import * as utils from '../utils';
4
+
5
+ jest.mock('../utils');
6
+
7
+ describe('NetworkHandler', () => {
8
+ const onEvent = jest.fn();
9
+
10
+ const config = {
11
+ ignoredUrls: [],
12
+ onEvent,
13
+ };
14
+
15
+ let handler: NetworkHandler;
16
+ let callbacks: ReturnType<NetworkHandler['getCallbacks']>;
17
+ let xhr: XMLHttpRequest;
18
+
19
+ beforeEach(() => {
20
+ jest.clearAllMocks();
21
+
22
+ handler = new NetworkHandler(config);
23
+ callbacks = handler.getCallbacks();
24
+
25
+ xhr = {} as XMLHttpRequest;
26
+
27
+ jest
28
+ .spyOn(utils, 'generateRequestId')
29
+ .mockReturnValue('request-id');
30
+
31
+ jest
32
+ .spyOn(Date, 'now')
33
+ .mockReturnValueOnce(1000)
34
+ .mockReturnValueOnce(1500);
35
+ });
36
+
37
+ afterEach(() => {
38
+ jest.restoreAllMocks();
39
+ });
40
+
41
+ it('should create pending request on open', () => {
42
+ jest
43
+ .spyOn(utils, 'shouldIgnoreUrl')
44
+ .mockReturnValue(false);
45
+
46
+ callbacks.onOpen(
47
+ 'GET',
48
+ 'https://api.com',
49
+ xhr,
50
+ );
51
+
52
+ callbacks.onSend(undefined, xhr);
53
+
54
+ expect(onEvent).toHaveBeenCalledWith(
55
+ expect.objectContaining({
56
+ stage: 'request',
57
+ requestId: 'request-id',
58
+ method: 'GET',
59
+ url: 'https://api.com',
60
+ }),
61
+ );
62
+ });
63
+
64
+ it('should ignore urls that match ignored patterns', () => {
65
+ jest
66
+ .spyOn(utils, 'shouldIgnoreUrl')
67
+ .mockReturnValue(true);
68
+
69
+ callbacks.onOpen(
70
+ 'GET',
71
+ 'https://ignored.com',
72
+ xhr,
73
+ );
74
+
75
+ callbacks.onSend(undefined, xhr);
76
+
77
+ expect(onEvent).not.toHaveBeenCalled();
78
+ });
79
+
80
+ it('should attach request headers', () => {
81
+ jest
82
+ .spyOn(utils, 'shouldIgnoreUrl')
83
+ .mockReturnValue(false);
84
+
85
+ callbacks.onOpen(
86
+ 'POST',
87
+ 'https://api.com',
88
+ xhr,
89
+ );
90
+
91
+ callbacks.onRequestHeader(
92
+ 'Authorization',
93
+ 'Bearer token',
94
+ xhr,
95
+ );
96
+
97
+ callbacks.onSend(undefined, xhr);
98
+
99
+ expect(onEvent).toHaveBeenCalledWith(
100
+ expect.objectContaining({
101
+ headers: {
102
+ Authorization: 'Bearer token',
103
+ },
104
+ }),
105
+ );
106
+ });
107
+
108
+ it('should attach request body', () => {
109
+ jest
110
+ .spyOn(utils, 'shouldIgnoreUrl')
111
+ .mockReturnValue(false);
112
+
113
+ callbacks.onOpen(
114
+ 'POST',
115
+ 'https://api.com',
116
+ xhr,
117
+ );
118
+
119
+ callbacks.onSend(
120
+ { name: 'Gabriel' },
121
+ xhr,
122
+ );
123
+
124
+ expect(onEvent).toHaveBeenCalledWith(
125
+ expect.objectContaining({
126
+ body: JSON.stringify({
127
+ name: 'Gabriel',
128
+ }),
129
+ }),
130
+ );
131
+ });
132
+
133
+ it('should parse response headers', () => {
134
+ jest
135
+ .spyOn(utils, 'shouldIgnoreUrl')
136
+ .mockReturnValue(false);
137
+
138
+ jest
139
+ .spyOn(utils, 'parseResponseHeaders')
140
+ .mockReturnValue({
141
+ 'content-type': 'application/json',
142
+ });
143
+
144
+ callbacks.onOpen(
145
+ 'GET',
146
+ 'https://api.com',
147
+ xhr,
148
+ );
149
+
150
+ callbacks.onHeaderReceived(
151
+ undefined,
152
+ undefined,
153
+ 'Content-Type: application/json',
154
+ xhr,
155
+ );
156
+
157
+ callbacks.onResponse(
158
+ 200,
159
+ false,
160
+ 'ok',
161
+ 'https://api.com',
162
+ 'text',
163
+ xhr,
164
+ );
165
+
166
+ expect(onEvent).toHaveBeenLastCalledWith(
167
+ expect.objectContaining({
168
+ headers: {
169
+ 'content-type':
170
+ 'application/json',
171
+ },
172
+ }),
173
+ );
174
+ });
175
+
176
+ it('should emit response event', () => {
177
+ jest
178
+ .spyOn(utils, 'shouldIgnoreUrl')
179
+ .mockReturnValue(false);
180
+
181
+ jest
182
+ .spyOn(utils, 'responseToString')
183
+ .mockReturnValue('response body');
184
+
185
+ callbacks.onOpen(
186
+ 'GET',
187
+ 'https://api.com',
188
+ xhr,
189
+ );
190
+
191
+ callbacks.onSend(undefined, xhr);
192
+
193
+ callbacks.onResponse(
194
+ 200,
195
+ false,
196
+ 'response',
197
+ 'https://api.com',
198
+ 'text',
199
+ xhr,
200
+ );
201
+
202
+ expect(onEvent).toHaveBeenLastCalledWith(
203
+ expect.objectContaining({
204
+ stage: 'response',
205
+ statusCode: 200,
206
+ body: 'response body',
207
+ duration: 500,
208
+ }),
209
+ );
210
+ });
211
+
212
+ it('should handle blob responses', async () => {
213
+ jest
214
+ .spyOn(utils, 'shouldIgnoreUrl')
215
+ .mockReturnValue(false);
216
+
217
+ jest
218
+ .spyOn(utils, 'readBlobAsText')
219
+ .mockResolvedValue('blob content');
220
+
221
+ callbacks.onOpen(
222
+ 'GET',
223
+ 'https://api.com',
224
+ xhr,
225
+ );
226
+
227
+ callbacks.onResponse(
228
+ 200,
229
+ false,
230
+ new Blob(['hello']),
231
+ 'https://api.com',
232
+ 'blob',
233
+ xhr,
234
+ );
235
+
236
+ await Promise.resolve();
237
+
238
+ expect(utils.readBlobAsText)
239
+ .toHaveBeenCalled();
240
+
241
+ expect(onEvent).toHaveBeenCalledWith(
242
+ expect.objectContaining({
243
+ body: 'blob content',
244
+ }),
245
+ );
246
+ });
247
+
248
+ it('should clear pending requests', () => {
249
+ jest
250
+ .spyOn(utils, 'shouldIgnoreUrl')
251
+ .mockReturnValue(false);
252
+
253
+ callbacks.onOpen(
254
+ 'GET',
255
+ 'https://api.com',
256
+ xhr,
257
+ );
258
+
259
+ handler.clear();
260
+
261
+ callbacks.onSend(undefined, xhr);
262
+
263
+ expect(onEvent).not.toHaveBeenCalled();
264
+ });
265
+ });
@@ -0,0 +1 @@
1
+ export * from './network-handler'
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Network interception handler
3
+ * Manages XHR request/response tracking and event creation
4
+ */
5
+
6
+ import type {
7
+ NetworkCallbacks,
8
+ NetworkRequestEvent,
9
+ NetworkResponseEvent,
10
+ PendingRequest,
11
+ } from '../types'
12
+ import {
13
+ generateRequestId,
14
+ parseResponseHeaders,
15
+ shouldIgnoreUrl,
16
+ readBlobAsText,
17
+ responseToString,
18
+ } from './utils'
19
+ import type { NetworkHandlerConfig } from './types'
20
+ import { projectHandler } from '../project'
21
+
22
+ export class NetworkHandler {
23
+ private pendingRequests = new Map<XMLHttpRequest, PendingRequest>()
24
+ private config: NetworkHandlerConfig
25
+
26
+ constructor(config: NetworkHandlerConfig) {
27
+ this.config = config
28
+ }
29
+
30
+ getCallbacks(): NetworkCallbacks {
31
+ return {
32
+ onOpen: this.handleOpen.bind(this),
33
+ onRequestHeader: this.handleRequestHeader.bind(this),
34
+ onSend: this.handleSend.bind(this),
35
+ onHeaderReceived: this.handleHeaderReceived.bind(this),
36
+ onResponse: this.handleResponse.bind(this),
37
+ }
38
+ }
39
+
40
+ private handleOpen(method: string, url: string, xhr: XMLHttpRequest): void {
41
+ if (shouldIgnoreUrl(url, this.config.ignoredUrls)) return
42
+
43
+ const request: PendingRequest = {
44
+ id: generateRequestId(),
45
+ method,
46
+ url,
47
+ headers: {},
48
+ startTime: Date.now(),
49
+ }
50
+ this.pendingRequests.set(xhr, request)
51
+ }
52
+
53
+ private handleRequestHeader(
54
+ header: string,
55
+ value: string,
56
+ xhr: XMLHttpRequest
57
+ ): void {
58
+ const request = this.pendingRequests.get(xhr)
59
+ if (request) {
60
+ request.headers[header] = value
61
+ }
62
+ }
63
+
64
+ private handleSend(data: unknown, xhr: XMLHttpRequest): void {
65
+ const request = this.pendingRequests.get(xhr)
66
+ if (!request) return
67
+
68
+ if (data !== null && data !== undefined) {
69
+ request.body = typeof data === 'string' ? data : JSON.stringify(data)
70
+ }
71
+
72
+ const event: NetworkRequestEvent = {
73
+ type: 'network',
74
+ stage: 'request',
75
+ requestId: request.id,
76
+ method: request.method,
77
+ url: request.url,
78
+ headers: request.headers,
79
+ body: request.body,
80
+ timestamp: request.startTime,
81
+ projectId: projectHandler.getProjectId(),
82
+ }
83
+ this.config.onEvent(event)
84
+ }
85
+
86
+ private handleHeaderReceived(
87
+ _responseContentType: string | undefined,
88
+ _responseSize: number | undefined,
89
+ responseHeaders: string,
90
+ xhr: XMLHttpRequest
91
+ ): void {
92
+ const request = this.pendingRequests.get(xhr)
93
+ if (request) {
94
+ request.responseHeaders = parseResponseHeaders(responseHeaders)
95
+ }
96
+ }
97
+
98
+ private handleResponse(
99
+ status: number,
100
+ _timeout: boolean,
101
+ response: unknown,
102
+ responseURL: string,
103
+ responseType: string,
104
+ xhr: XMLHttpRequest
105
+ ): void {
106
+ const request = this.pendingRequests.get(xhr)
107
+ if (!request) return
108
+
109
+ const endTime = Date.now()
110
+ const projectId = projectHandler.getProjectId()
111
+
112
+ const sendResponseEvent = (bodyString: string | undefined) => {
113
+ const event: NetworkResponseEvent = {
114
+ type: 'network',
115
+ stage: 'response',
116
+ requestId: request.id,
117
+ method: request.method,
118
+ url: responseURL || request.url,
119
+ statusCode: status,
120
+ duration: endTime - request.startTime,
121
+ headers: request.responseHeaders,
122
+ body: bodyString,
123
+ timestamp: endTime,
124
+ projectId,
125
+ }
126
+ this.config.onEvent(event)
127
+ this.pendingRequests.delete(xhr)
128
+ }
129
+
130
+ if (responseType === 'blob' && response instanceof Blob) {
131
+ readBlobAsText(response).then(sendResponseEvent)
132
+ return
133
+ }
134
+
135
+ sendResponseEvent(responseToString(response, xhr))
136
+ }
137
+
138
+ clear(): void {
139
+ this.pendingRequests.clear()
140
+ }
141
+ }
@@ -0,0 +1,6 @@
1
+ import type { NetworkRequestEvent, NetworkResponseEvent } from '../types'
2
+
3
+ export interface NetworkHandlerConfig {
4
+ ignoredUrls: RegExp[]
5
+ onEvent: (event: NetworkRequestEvent | NetworkResponseEvent) => void
6
+ }
@@ -0,0 +1,22 @@
1
+ import { generateRequestId } from '../generate-request-id'
2
+
3
+ describe('generateRequestId', () => {
4
+ it('should return a string', () => {
5
+ const id = generateRequestId()
6
+
7
+ expect(typeof id).toBe('string')
8
+ })
9
+
10
+ it('should generate an id in the expected format', () => {
11
+ const id = generateRequestId()
12
+
13
+ expect(id).toMatch(/^\d+-[a-z0-9]+$/)
14
+ })
15
+
16
+ it('should generate unique ids', () => {
17
+ const id1 = generateRequestId()
18
+ const id2 = generateRequestId()
19
+
20
+ expect(id1).not.toBe(id2)
21
+ })
22
+ })
@@ -0,0 +1,71 @@
1
+ import { parseResponseHeaders } from '../parse-response-headers'
2
+
3
+ describe('parseResponseHeaders', () => {
4
+ it('should return empty object when headers string is empty', () => {
5
+ expect(parseResponseHeaders('')).toEqual({})
6
+ })
7
+
8
+ it('should parse single header', () => {
9
+ const headers = parseResponseHeaders('Content-Type: application/json')
10
+
11
+ expect(headers).toEqual({
12
+ 'Content-Type': 'application/json',
13
+ })
14
+ })
15
+
16
+ it('should parse multiple headers', () => {
17
+ const headers = parseResponseHeaders(
18
+ [
19
+ 'Content-Type: application/json',
20
+ 'Authorization: Bearer token',
21
+ 'X-Test: 123',
22
+ ].join('\r\n')
23
+ )
24
+
25
+ expect(headers).toEqual({
26
+ 'Content-Type': 'application/json',
27
+ 'Authorization': 'Bearer token',
28
+ 'X-Test': '123',
29
+ })
30
+ })
31
+
32
+ it('should trim spaces from keys and values', () => {
33
+ const headers = parseResponseHeaders(
34
+ ' Content-Type : application/json '
35
+ )
36
+
37
+ expect(headers).toEqual({
38
+ 'Content-Type': 'application/json',
39
+ })
40
+ })
41
+
42
+ it('should ignore invalid lines', () => {
43
+ const headers = parseResponseHeaders(
44
+ ['Content-Type: application/json', 'invalid-line', ': missing-key'].join(
45
+ '\n'
46
+ )
47
+ )
48
+
49
+ expect(headers).toEqual({
50
+ 'Content-Type': 'application/json',
51
+ })
52
+ })
53
+
54
+ it('should support values containing colon', () => {
55
+ const headers = parseResponseHeaders('Authorization: Bearer abc:def:ghi')
56
+
57
+ expect(headers).toEqual({
58
+ Authorization: 'Bearer abc:def:ghi',
59
+ })
60
+ })
61
+
62
+ it('should overwrite duplicated headers', () => {
63
+ const headers = parseResponseHeaders(
64
+ ['X-Test: first', 'X-Test: second'].join('\n')
65
+ )
66
+
67
+ expect(headers).toEqual({
68
+ 'X-Test': 'second',
69
+ })
70
+ })
71
+ })
@@ -0,0 +1,79 @@
1
+ import { readBlobAsText } from '../read-blob-as-text'
2
+
3
+ describe('readBlobAsText', () => {
4
+ const originalFileReader = global.FileReader
5
+
6
+ afterEach(() => {
7
+ global.FileReader = originalFileReader
8
+ jest.restoreAllMocks()
9
+ })
10
+
11
+ it('should resolve blob text successfully', async () => {
12
+ class MockFileReader {
13
+ result = 'hello world'
14
+
15
+ onloadend: (() => void) | null = null
16
+ onerror: (() => void) | null = null
17
+
18
+ readAsText() {
19
+ this.onloadend?.()
20
+ }
21
+ }
22
+
23
+ // @ts-ignore
24
+ global.FileReader = MockFileReader
25
+
26
+ const blob = new Blob(['hello world'])
27
+
28
+ const result = await readBlobAsText(blob)
29
+
30
+ expect(result).toBe('hello world')
31
+ })
32
+
33
+ it('should resolve undefined on error', async () => {
34
+ class MockFileReader {
35
+ result = null
36
+
37
+ onloadend: (() => void) | null = null
38
+ onerror: (() => void) | null = null
39
+
40
+ readAsText() {
41
+ this.onerror?.()
42
+ }
43
+ }
44
+
45
+ // @ts-ignore
46
+ global.FileReader = MockFileReader
47
+
48
+ const blob = new Blob(['test'])
49
+
50
+ const result = await readBlobAsText(blob)
51
+
52
+ expect(result).toBeUndefined()
53
+ })
54
+
55
+ it('should call readAsText with provided blob', async () => {
56
+ const readAsTextMock = jest.fn()
57
+
58
+ class MockFileReader {
59
+ result = 'ok'
60
+
61
+ onloadend: (() => void) | null = null
62
+ onerror: (() => void) | null = null
63
+
64
+ readAsText(blob: Blob) {
65
+ readAsTextMock(blob)
66
+ this.onloadend?.()
67
+ }
68
+ }
69
+
70
+ // @ts-ignore
71
+ global.FileReader = MockFileReader
72
+
73
+ const blob = new Blob(['content'])
74
+
75
+ await readBlobAsText(blob)
76
+
77
+ expect(readAsTextMock).toHaveBeenCalledWith(blob)
78
+ })
79
+ })