@teardown/cli 1.2.39 → 2.0.41

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 (260) hide show
  1. package/bin/teardown.js +11 -1
  2. package/package.json +77 -57
  3. package/src/cli/commands/init.ts +254 -0
  4. package/src/cli/commands/plugins.ts +93 -0
  5. package/src/cli/commands/prebuild.ts +168 -0
  6. package/src/cli/commands/run.ts +727 -0
  7. package/src/cli/commands/start.ts +87 -0
  8. package/src/cli/commands/validate.ts +62 -0
  9. package/src/cli/index.ts +59 -0
  10. package/src/config/index.ts +45 -0
  11. package/src/config/loader.ts +366 -0
  12. package/src/config/schema.ts +235 -0
  13. package/src/config/types.ts +322 -0
  14. package/src/index.ts +177 -0
  15. package/src/pipeline/cache.ts +179 -0
  16. package/src/pipeline/index.ts +10 -0
  17. package/src/pipeline/stages.ts +692 -0
  18. package/src/plugins/base.ts +370 -0
  19. package/src/plugins/capabilities/biometrics.ts +64 -0
  20. package/src/plugins/capabilities/bluetooth.ts +86 -0
  21. package/src/plugins/capabilities/calendar.ts +57 -0
  22. package/src/plugins/capabilities/camera.ts +77 -0
  23. package/src/plugins/capabilities/contacts.ts +57 -0
  24. package/src/plugins/capabilities/deep-linking.ts +124 -0
  25. package/src/plugins/capabilities/firebase.ts +138 -0
  26. package/src/plugins/capabilities/index.ts +96 -0
  27. package/src/plugins/capabilities/location.ts +87 -0
  28. package/src/plugins/capabilities/photo-library.ts +80 -0
  29. package/src/plugins/capabilities/push-notifications.ts +98 -0
  30. package/src/plugins/capabilities/sign-in-with-apple.ts +53 -0
  31. package/src/plugins/context.ts +220 -0
  32. package/src/plugins/index.ts +26 -0
  33. package/src/plugins/resolver.ts +321 -0
  34. package/src/templates/generator.ts +507 -0
  35. package/src/templates/index.ts +9 -0
  36. package/src/templates/paths.ts +25 -0
  37. package/src/transformers/android/gradle.ts +400 -0
  38. package/src/transformers/android/index.ts +19 -0
  39. package/src/transformers/android/manifest.ts +506 -0
  40. package/src/transformers/index.ts +39 -0
  41. package/src/transformers/ios/entitlements.ts +283 -0
  42. package/src/transformers/ios/index.ts +10 -0
  43. package/src/transformers/ios/pbxproj.ts +267 -0
  44. package/src/transformers/ios/plist.ts +198 -0
  45. package/src/utils/fs.ts +429 -0
  46. package/src/utils/index.ts +21 -0
  47. package/src/utils/logger.ts +203 -0
  48. package/templates/.gitignore +63 -0
  49. package/templates/Gemfile +3 -0
  50. package/templates/android/app/build.gradle.kts +97 -0
  51. package/templates/android/app/proguard-rules.pro +10 -0
  52. package/templates/android/app/src/main/AndroidManifest.xml +26 -0
  53. package/templates/android/app/src/main/java/com/appname/MainActivity.kt +22 -0
  54. package/templates/android/app/src/main/java/com/appname/MainApplication.kt +44 -0
  55. package/templates/android/app/src/main/res/values/strings.xml +3 -0
  56. package/templates/android/app/src/main/res/values/styles.xml +7 -0
  57. package/templates/android/build.gradle.kts +44 -0
  58. package/templates/android/gradle.properties +39 -0
  59. package/templates/android/settings.gradle.kts +12 -0
  60. package/templates/babel.config.js +15 -0
  61. package/templates/index.js +7 -0
  62. package/templates/ios/.xcode.env +11 -0
  63. package/templates/ios/AppName/AppDelegate.swift +25 -0
  64. package/templates/ios/AppName/AppName-Bridging-Header.h +4 -0
  65. package/templates/ios/AppName/AppName.entitlements +6 -0
  66. package/templates/ios/AppName/Images.xcassets/AppIcon.appiconset/Contents.json +35 -0
  67. package/templates/ios/AppName/Images.xcassets/Contents.json +6 -0
  68. package/templates/ios/AppName/Info.plist +49 -0
  69. package/templates/ios/AppName/LaunchScreen.storyboard +38 -0
  70. package/templates/ios/AppName.xcodeproj/project.pbxproj +402 -0
  71. package/templates/ios/AppName.xcodeproj/xcshareddata/xcschemes/AppName.xcscheme +78 -0
  72. package/templates/ios/Podfile +35 -0
  73. package/templates/metro.config.js +41 -0
  74. package/templates/package.json +57 -0
  75. package/templates/react-native.config.js +8 -0
  76. package/templates/src/app/index.tsx +34 -0
  77. package/templates/src/assets/fonts/.gitkeep +1 -0
  78. package/templates/src/assets/images/.gitkeep +1 -0
  79. package/templates/src/components/ui/accordion.tsx +114 -0
  80. package/templates/src/components/ui/avatar.tsx +75 -0
  81. package/templates/src/components/ui/button.tsx +93 -0
  82. package/templates/src/components/ui/card.tsx +120 -0
  83. package/templates/src/components/ui/checkbox.tsx +133 -0
  84. package/templates/src/components/ui/chip.tsx +95 -0
  85. package/templates/src/components/ui/dialog.tsx +134 -0
  86. package/templates/src/components/ui/divider.tsx +67 -0
  87. package/templates/src/components/ui/error-view.tsx +82 -0
  88. package/templates/src/components/ui/form-field.tsx +101 -0
  89. package/templates/src/components/ui/index.ts +100 -0
  90. package/templates/src/components/ui/popover.tsx +92 -0
  91. package/templates/src/components/ui/pressable-feedback.tsx +88 -0
  92. package/templates/src/components/ui/radio-group.tsx +153 -0
  93. package/templates/src/components/ui/scroll-shadow.tsx +108 -0
  94. package/templates/src/components/ui/select.tsx +165 -0
  95. package/templates/src/components/ui/skeleton-group.tsx +97 -0
  96. package/templates/src/components/ui/skeleton.tsx +87 -0
  97. package/templates/src/components/ui/spinner.tsx +87 -0
  98. package/templates/src/components/ui/surface.tsx +95 -0
  99. package/templates/src/components/ui/switch.tsx +124 -0
  100. package/templates/src/components/ui/tabs.tsx +154 -0
  101. package/templates/src/components/ui/text-field.tsx +106 -0
  102. package/templates/src/components/ui/toast.tsx +129 -0
  103. package/templates/src/contexts/.gitkeep +2 -0
  104. package/templates/src/core/clients/api/api.client.ts +113 -0
  105. package/templates/src/core/clients/api/index.ts +1 -0
  106. package/templates/src/core/clients/storage/index.ts +1 -0
  107. package/templates/src/core/clients/storage/storage.client.ts +121 -0
  108. package/templates/src/core/constants/index.ts +19 -0
  109. package/templates/src/core/core.ts +40 -0
  110. package/templates/src/core/index.ts +10 -0
  111. package/templates/src/global.css +87 -0
  112. package/templates/src/hooks/index.ts +6 -0
  113. package/templates/src/hooks/use-debounce.ts +23 -0
  114. package/templates/src/hooks/use-mounted.ts +21 -0
  115. package/templates/src/index.ts +28 -0
  116. package/templates/src/lib/index.ts +5 -0
  117. package/templates/src/lib/utils.ts +115 -0
  118. package/templates/src/modules/.gitkeep +6 -0
  119. package/templates/src/navigation/index.ts +8 -0
  120. package/templates/src/navigation/navigation-provider.tsx +36 -0
  121. package/templates/src/navigation/router.tsx +137 -0
  122. package/templates/src/providers/app.provider.tsx +29 -0
  123. package/templates/src/providers/index.ts +5 -0
  124. package/templates/src/routes/(tabs)/_layout.tsx +42 -0
  125. package/templates/src/routes/(tabs)/explore.tsx +161 -0
  126. package/templates/src/routes/(tabs)/home.tsx +138 -0
  127. package/templates/src/routes/(tabs)/profile.tsx +151 -0
  128. package/templates/src/routes/_layout.tsx +18 -0
  129. package/templates/src/routes/settings.tsx +194 -0
  130. package/templates/src/screens/auth/index.ts +6 -0
  131. package/templates/src/screens/auth/login.tsx +165 -0
  132. package/templates/src/screens/auth/register.tsx +203 -0
  133. package/templates/src/screens/home.tsx +204 -0
  134. package/templates/src/screens/index.ts +17 -0
  135. package/templates/src/screens/profile.tsx +210 -0
  136. package/templates/src/screens/settings.tsx +216 -0
  137. package/templates/src/screens/welcome.tsx +101 -0
  138. package/templates/src/styles/index.ts +103 -0
  139. package/templates/src/types/common.ts +71 -0
  140. package/templates/src/types/index.ts +5 -0
  141. package/templates/tsconfig.json +14 -0
  142. package/README.md +0 -15
  143. package/assets/favicon.ico +0 -0
  144. package/dist/commands/dev/dev.d.ts +0 -22
  145. package/dist/commands/dev/dev.js +0 -56
  146. package/dist/commands/dev/dev.js.map +0 -1
  147. package/dist/commands/init/init-teardown.d.ts +0 -9
  148. package/dist/commands/init/init-teardown.js +0 -27
  149. package/dist/commands/init/init-teardown.js.map +0 -1
  150. package/dist/index.d.ts +0 -1
  151. package/dist/index.js +0 -21
  152. package/dist/index.js.map +0 -1
  153. package/dist/modules/dev/dev-menu/keyboard-handler.d.ts +0 -21
  154. package/dist/modules/dev/dev-menu/keyboard-handler.js +0 -139
  155. package/dist/modules/dev/dev-menu/keyboard-handler.js.map +0 -1
  156. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.d.ts +0 -18
  157. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js +0 -106
  158. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js.map +0 -1
  159. package/dist/modules/dev/dev-server/cdp/cdp.adapter.d.ts +0 -6
  160. package/dist/modules/dev/dev-server/cdp/cdp.adapter.js +0 -13
  161. package/dist/modules/dev/dev-server/cdp/cdp.adapter.js.map +0 -1
  162. package/dist/modules/dev/dev-server/cdp/index.d.ts +0 -2
  163. package/dist/modules/dev/dev-server/cdp/index.js +0 -19
  164. package/dist/modules/dev/dev-server/cdp/index.js.map +0 -1
  165. package/dist/modules/dev/dev-server/cdp/types.d.ts +0 -107
  166. package/dist/modules/dev/dev-server/cdp/types.js +0 -3
  167. package/dist/modules/dev/dev-server/cdp/types.js.map +0 -1
  168. package/dist/modules/dev/dev-server/dev-server-checker.d.ts +0 -22
  169. package/dist/modules/dev/dev-server/dev-server-checker.js +0 -73
  170. package/dist/modules/dev/dev-server/dev-server-checker.js.map +0 -1
  171. package/dist/modules/dev/dev-server/dev-server.d.ts +0 -74
  172. package/dist/modules/dev/dev-server/dev-server.js +0 -272
  173. package/dist/modules/dev/dev-server/dev-server.js.map +0 -1
  174. package/dist/modules/dev/dev-server/inspector/device.d.ts +0 -46
  175. package/dist/modules/dev/dev-server/inspector/device.event-reporter.d.ts +0 -37
  176. package/dist/modules/dev/dev-server/inspector/device.event-reporter.js +0 -166
  177. package/dist/modules/dev/dev-server/inspector/device.event-reporter.js.map +0 -1
  178. package/dist/modules/dev/dev-server/inspector/device.js +0 -578
  179. package/dist/modules/dev/dev-server/inspector/device.js.map +0 -1
  180. package/dist/modules/dev/dev-server/inspector/inspector.d.ts +0 -27
  181. package/dist/modules/dev/dev-server/inspector/inspector.js +0 -225
  182. package/dist/modules/dev/dev-server/inspector/inspector.js.map +0 -1
  183. package/dist/modules/dev/dev-server/inspector/types.d.ts +0 -156
  184. package/dist/modules/dev/dev-server/inspector/types.js +0 -3
  185. package/dist/modules/dev/dev-server/inspector/types.js.map +0 -1
  186. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.d.ts +0 -14
  187. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js +0 -63
  188. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js.map +0 -1
  189. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.d.ts +0 -19
  190. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js +0 -66
  191. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js.map +0 -1
  192. package/dist/modules/dev/dev-server/plugins/devtools.plugin.d.ts +0 -1
  193. package/dist/modules/dev/dev-server/plugins/devtools.plugin.js +0 -51
  194. package/dist/modules/dev/dev-server/plugins/devtools.plugin.js.map +0 -1
  195. package/dist/modules/dev/dev-server/plugins/favicon.plugin.d.ts +0 -1
  196. package/dist/modules/dev/dev-server/plugins/favicon.plugin.js +0 -19
  197. package/dist/modules/dev/dev-server/plugins/favicon.plugin.js.map +0 -1
  198. package/dist/modules/dev/dev-server/plugins/multipart.plugin.d.ts +0 -1
  199. package/dist/modules/dev/dev-server/plugins/multipart.plugin.js +0 -63
  200. package/dist/modules/dev/dev-server/plugins/multipart.plugin.js.map +0 -1
  201. package/dist/modules/dev/dev-server/plugins/systrace.plugin.d.ts +0 -1
  202. package/dist/modules/dev/dev-server/plugins/systrace.plugin.js +0 -29
  203. package/dist/modules/dev/dev-server/plugins/systrace.plugin.js.map +0 -1
  204. package/dist/modules/dev/dev-server/plugins/types.d.ts +0 -11
  205. package/dist/modules/dev/dev-server/plugins/types.js +0 -3
  206. package/dist/modules/dev/dev-server/plugins/types.js.map +0 -1
  207. package/dist/modules/dev/dev-server/plugins/wss/index.d.ts +0 -3
  208. package/dist/modules/dev/dev-server/plugins/wss/index.js +0 -20
  209. package/dist/modules/dev/dev-server/plugins/wss/index.js.map +0 -1
  210. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.d.ts +0 -37
  211. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js +0 -67
  212. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js.map +0 -1
  213. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.d.ts +0 -63
  214. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js +0 -129
  215. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js.map +0 -1
  216. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.d.ts +0 -32
  217. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js +0 -76
  218. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js.map +0 -1
  219. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.d.ts +0 -75
  220. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js +0 -199
  221. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js.map +0 -1
  222. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.d.ts +0 -44
  223. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js +0 -121
  224. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js.map +0 -1
  225. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.d.ts +0 -135
  226. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js +0 -364
  227. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js.map +0 -1
  228. package/dist/modules/dev/dev-server/plugins/wss/types.d.ts +0 -6
  229. package/dist/modules/dev/dev-server/plugins/wss/types.js +0 -3
  230. package/dist/modules/dev/dev-server/plugins/wss/types.js.map +0 -1
  231. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.d.ts +0 -32
  232. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js +0 -58
  233. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js.map +0 -1
  234. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.d.ts +0 -13
  235. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js +0 -27
  236. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js.map +0 -1
  237. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.d.ts +0 -39
  238. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js +0 -47
  239. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js.map +0 -1
  240. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.d.ts +0 -24
  241. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js +0 -56
  242. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js.map +0 -1
  243. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.d.ts +0 -7
  244. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js +0 -41
  245. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js.map +0 -1
  246. package/dist/modules/dev/dev-server/sybmolicate/types.d.ts +0 -64
  247. package/dist/modules/dev/dev-server/sybmolicate/types.js +0 -3
  248. package/dist/modules/dev/dev-server/sybmolicate/types.js.map +0 -1
  249. package/dist/modules/dev/terminal/base.terminal.reporter.d.ts +0 -25
  250. package/dist/modules/dev/terminal/base.terminal.reporter.js +0 -79
  251. package/dist/modules/dev/terminal/base.terminal.reporter.js.map +0 -1
  252. package/dist/modules/dev/terminal/terminal.reporter.d.ts +0 -13
  253. package/dist/modules/dev/terminal/terminal.reporter.js +0 -83
  254. package/dist/modules/dev/terminal/terminal.reporter.js.map +0 -1
  255. package/dist/modules/dev/types.d.ts +0 -20
  256. package/dist/modules/dev/types.js +0 -3
  257. package/dist/modules/dev/types.js.map +0 -1
  258. package/dist/modules/dev/utils/log.d.ts +0 -23
  259. package/dist/modules/dev/utils/log.js +0 -74
  260. package/dist/modules/dev/utils/log.js.map +0 -1
@@ -1,225 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Inspector = void 0;
7
- const ws_1 = require("ws");
8
- const node_url_1 = require("node:url");
9
- const node_url_2 = __importDefault(require("node:url"));
10
- const device_1 = require("./device");
11
- const WS_DEVICE_PATH = "/inspector/device";
12
- const WS_DEBUGGER_PATH = "/inspector/debug";
13
- const JSON_VERSION_PATH = "/json/version";
14
- const JSON_LIST_PATH = "/json";
15
- const JSON_LIST_PATH_2 = "/json/list";
16
- const HEARTBEAT_INTERVAL = 10000;
17
- const MAX_PONG_TIMEOUT = 15000;
18
- const INTERNAL_ERROR_CODE = 1011;
19
- class Inspector {
20
- devices = new Map();
21
- deviceCounter = 0;
22
- projectRoot;
23
- serverBaseUrl;
24
- eventReporter;
25
- cdpAdapter;
26
- constructor(options) {
27
- this.projectRoot = options.projectRoot;
28
- this.serverBaseUrl = options.serverBaseUrl;
29
- this.eventReporter = options.eventReporter;
30
- this.cdpAdapter = options.cdpAdapter;
31
- }
32
- getPageDescriptions() {
33
- const descriptions = [];
34
- for (const [deviceId, device] of this.devices.entries()) {
35
- const devicePages = device
36
- .getPagesList()
37
- .map((page) => this.createPageDescription(deviceId, device, page));
38
- descriptions.push(...devicePages);
39
- }
40
- return descriptions;
41
- }
42
- handleHttpRequest(req, res, next) {
43
- const pathname = new node_url_1.URL(req.url || "", "http://localhost").pathname;
44
- if (pathname === JSON_LIST_PATH || pathname === JSON_LIST_PATH_2) {
45
- this.sendJsonResponse(res, this.getPageDescriptions());
46
- }
47
- else if (pathname === JSON_VERSION_PATH) {
48
- this.sendJsonResponse(res, {
49
- Browser: "Mobile JavaScript",
50
- "Protocol-Version": "1.1",
51
- });
52
- }
53
- else {
54
- next();
55
- }
56
- }
57
- createWebSocketServers() {
58
- return {
59
- [WS_DEVICE_PATH]: this.createDeviceWebSocketServer(),
60
- [WS_DEBUGGER_PATH]: this.createDebuggerWebSocketServer(),
61
- };
62
- }
63
- createPageDescription(deviceId, device, page) {
64
- const { host, protocol } = new node_url_1.URL(this.serverBaseUrl);
65
- const wsProtocol = protocol === "https:" ? "wss" : "ws";
66
- const wsPath = `${host}${WS_DEBUGGER_PATH}?device=${deviceId}&page=${page.id}`;
67
- return {
68
- id: `${deviceId}-${page.id}`,
69
- title: page.title,
70
- // @ts-ignore
71
- description: page.description || page.app,
72
- type: "node",
73
- webSocketDebuggerUrl: `${wsProtocol}://${wsPath}`,
74
- devtoolsFrontendUrl: `devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&${wsProtocol}=${encodeURIComponent(wsPath)}`,
75
- deviceName: device.getName(),
76
- appId: page.app,
77
- vm: page.vm,
78
- reactNative: {
79
- logicalDeviceId: deviceId,
80
- capabilities: page.capabilities,
81
- },
82
- };
83
- }
84
- createDeviceWebSocketServer() {
85
- const wss = new ws_1.WebSocketServer({
86
- noServer: true,
87
- perMessageDeflate: true,
88
- maxPayload: 0,
89
- });
90
- wss.on("connection", (socket, req) => {
91
- try {
92
- const fallbackDeviceId = String(this.deviceCounter++);
93
- const query = node_url_2.default.parse(req.url || "", true).query || {};
94
- const deviceId = query.device || fallbackDeviceId;
95
- const deviceName = query.name || "Unknown";
96
- const appName = query.app || "Unknown";
97
- const actualDeviceId = Array.isArray(deviceId) ? deviceId[0] : deviceId;
98
- const actualDeviceName = Array.isArray(deviceName)
99
- ? deviceName[0]
100
- : deviceName;
101
- const actualAppName = Array.isArray(appName) ? appName[0] : appName;
102
- const oldDevice = this.devices.get(actualDeviceId);
103
- let newDevice;
104
- if (oldDevice) {
105
- oldDevice.dangerouslyRecreateDevice(actualDeviceId, actualDeviceName, actualAppName, socket, this.projectRoot, this.eventReporter);
106
- newDevice = oldDevice;
107
- }
108
- else {
109
- newDevice = new device_1.Device(actualDeviceId, actualDeviceName, actualAppName, socket, this.projectRoot, this.eventReporter);
110
- }
111
- this.devices.set(actualDeviceId, newDevice);
112
- socket.on("close", () => {
113
- if (this.devices.get(actualDeviceId)?.dangerouslyGetSocket() === socket) {
114
- this.devices.delete(actualDeviceId);
115
- }
116
- // debug(`Device ${deviceName} disconnected.`);
117
- });
118
- }
119
- catch (e) {
120
- console.error("error", e);
121
- socket.close(INTERNAL_ERROR_CODE, e?.toString() ?? "Unknown error");
122
- }
123
- });
124
- return wss;
125
- }
126
- createDebuggerWebSocketServer() {
127
- const wss = new ws_1.WebSocketServer({
128
- noServer: true,
129
- maxPayload: 0,
130
- });
131
- wss.on("open", () => {
132
- console.info("open");
133
- });
134
- wss.on("connection", (ws, req) => {
135
- try {
136
- const query = new node_url_1.URL(req.url || "", "http://localhost").searchParams;
137
- const deviceId = query.get("device");
138
- const pageId = query.get("page");
139
- if (!deviceId || !pageId) {
140
- console.info("missing device or page id", deviceId, pageId);
141
- return;
142
- }
143
- const device = this.devices.get(deviceId);
144
- if (!device) {
145
- console.info("device not found", deviceId);
146
- return;
147
- }
148
- this.setupHeartbeat(ws);
149
- device.handleDebuggerConnection(ws, pageId, {
150
- userAgent: req.headers["user-agent"] || null,
151
- });
152
- }
153
- catch (err) {
154
- console.error(err);
155
- ws.close(INTERNAL_ERROR_CODE, err instanceof Error ? err.message : "Unknown error");
156
- this.eventReporter?.logEvent({
157
- type: "connect_debugger_frontend",
158
- status: "error",
159
- error: err,
160
- });
161
- }
162
- });
163
- return wss;
164
- }
165
- setupHeartbeat(ws) {
166
- let pendingHeartbeat = false;
167
- let terminateTimeout = null;
168
- const heartbeat = setInterval(() => {
169
- if (ws.readyState !== ws_1.WebSocket.OPEN) {
170
- return;
171
- }
172
- pendingHeartbeat = true;
173
- // Send a heartbeat message instead of ping
174
- ws.send(JSON.stringify({ method: "_heartbeat" }));
175
- terminateTimeout = setTimeout(() => {
176
- if (ws.readyState === ws_1.WebSocket.OPEN) {
177
- try {
178
- ws.terminate();
179
- }
180
- catch (e) {
181
- ws.close(INTERNAL_ERROR_CODE, "Termination failed");
182
- }
183
- }
184
- }, MAX_PONG_TIMEOUT);
185
- }, HEARTBEAT_INTERVAL);
186
- const resetHeartbeat = () => {
187
- pendingHeartbeat = false;
188
- if (terminateTimeout) {
189
- clearTimeout(terminateTimeout);
190
- terminateTimeout = null;
191
- }
192
- };
193
- ws.on("message", (data) => {
194
- try {
195
- const message = JSON.parse(data.toString());
196
- // Check for heartbeat response
197
- if (message.method === "_heartbeat_response") {
198
- resetHeartbeat();
199
- return;
200
- }
201
- }
202
- catch (e) {
203
- // If message isn't JSON or doesn't have expected format,
204
- // treat it as regular message for heartbeat purposes
205
- resetHeartbeat();
206
- }
207
- });
208
- ws.on("close", () => {
209
- clearInterval(heartbeat);
210
- resetHeartbeat();
211
- });
212
- }
213
- sendJsonResponse(res, data) {
214
- const json = JSON.stringify(data, null, 2);
215
- res.writeHead(200, {
216
- "Content-Type": "application/json; charset=UTF-8",
217
- "Cache-Control": "no-cache",
218
- "Content-Length": Buffer.byteLength(json),
219
- Connection: "close",
220
- });
221
- res.end(json);
222
- }
223
- }
224
- exports.Inspector = Inspector;
225
- //# sourceMappingURL=inspector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../../../../src/modules/dev/dev-server/inspector/inspector.ts"],"names":[],"mappings":"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"}
@@ -1,156 +0,0 @@
1
- import type WS from "ws";
2
- export type JSONSerializable = boolean | number | string | null | ReadonlyArray<JSONSerializable> | {
3
- [key: string]: JSONSerializable;
4
- };
5
- export interface PageFromDevice {
6
- id: string;
7
- title: string;
8
- vm: string;
9
- app: string;
10
- capabilities: Record<string, boolean>;
11
- }
12
- export type Page = Omit<PageFromDevice, "capabilities"> & {
13
- capabilities: NonNullable<PageFromDevice["capabilities"]>;
14
- };
15
- export type WrappedEvent = {
16
- event: "wrappedEvent";
17
- payload: {
18
- pageId: string;
19
- wrappedEvent: string;
20
- };
21
- };
22
- export type ConnectRequest = {
23
- event: "connect";
24
- payload: {
25
- pageId: string;
26
- };
27
- };
28
- export type DisconnectRequest = {
29
- event: "disconnect";
30
- payload: {
31
- pageId: string;
32
- };
33
- };
34
- export type GetPagesRequest = {
35
- event: "getPages";
36
- };
37
- export type GetPagesResponse = {
38
- event: "getPages";
39
- payload: ReadonlyArray<PageFromDevice>;
40
- };
41
- export type MessageFromDevice = GetPagesResponse | WrappedEvent | DisconnectRequest;
42
- export type MessageToDevice = GetPagesRequest | WrappedEvent | ConnectRequest | DisconnectRequest;
43
- export type PageDescription = {
44
- id: string;
45
- title: string;
46
- appId: string;
47
- description: string;
48
- type: string;
49
- devtoolsFrontendUrl: string;
50
- webSocketDebuggerUrl: string;
51
- /** @deprecated Prefer `title` */
52
- deviceName: string;
53
- /** @deprecated This is sent from legacy targets only */
54
- vm?: string;
55
- reactNative: {
56
- logicalDeviceId: string;
57
- capabilities: Page["capabilities"];
58
- };
59
- };
60
- export interface CDPMessage {
61
- id?: number;
62
- method?: string;
63
- params?: any;
64
- result?: any;
65
- }
66
- export interface DebuggerConnection {
67
- socket: WS;
68
- originalSourceURLAddress?: string;
69
- prependedFilePrefix: boolean;
70
- pageId: string;
71
- userAgent: string | null;
72
- customHandler: any | null;
73
- }
74
- type SuccessResult<Props extends Record<string, any> = {}> = {
75
- status: "success";
76
- } & Props;
77
- type ErrorResult<ErrorT = unknown> = {
78
- status: "error";
79
- error: ErrorT;
80
- prefersFuseboxFrontend?: boolean | null;
81
- };
82
- type CodedErrorResult<ErrorCode extends string> = {
83
- status: "coded_error";
84
- errorCode: ErrorCode;
85
- errorDetails?: string;
86
- };
87
- type DebuggerSessionIDs = {
88
- appId: string;
89
- deviceName: string;
90
- deviceId: string;
91
- pageId: string | null;
92
- };
93
- export type ReportableEvent = ({
94
- type: "launch_debugger_frontend";
95
- launchType: "launch" | "redirect";
96
- } & (SuccessResult<{
97
- appId: string | null;
98
- deviceId: string | null;
99
- resolvedTargetDescription: string;
100
- resolvedTargetAppId: string;
101
- prefersFuseboxFrontend: boolean;
102
- }> | ErrorResult | CodedErrorResult<"NO_APPS_FOUND">)) | ({
103
- type: "connect_debugger_frontend";
104
- } & (SuccessResult<{
105
- frontendUserAgent: string | null;
106
- } & DebuggerSessionIDs> | ErrorResult)) | ({
107
- type: "debugger_command";
108
- protocol: "CDP";
109
- method: string | null;
110
- requestOrigin: "proxy" | "debugger" | null;
111
- responseOrigin: "proxy" | "device";
112
- timeSinceStart: number | null;
113
- frontendUserAgent: string | null;
114
- prefersFuseboxFrontend: boolean | null;
115
- } & DebuggerSessionIDs & (SuccessResult | CodedErrorResult<"TIMED_OUT" | "DEVICE_DISCONNECTED" | "DEBUGGER_DISCONNECTED" | "UNMATCHED_REQUEST_ID" | "PROTOCOL_ERROR">)) | ({
116
- type: "proxy_error";
117
- status: "error";
118
- messageOrigin: "debugger" | "device";
119
- message: string;
120
- error: string;
121
- errorStack: string;
122
- } & DebuggerSessionIDs);
123
- export interface EventReporter {
124
- logEvent(event: ReportableEvent): void;
125
- }
126
- export type ExposedDevice = {
127
- appId: string;
128
- id: string;
129
- name: string;
130
- sendMessage: (message: JSONSerializable) => void;
131
- };
132
- export type ExposedDebugger = {
133
- userAgent: string | null;
134
- sendMessage: (message: JSONSerializable) => void;
135
- };
136
- export type CustomMessageHandlerConnection = {
137
- page: Page;
138
- device: ExposedDevice;
139
- debugger: ExposedDebugger;
140
- };
141
- export type CreateCustomMessageHandlerFn = (connection: CustomMessageHandlerConnection) => CustomMessageHandler;
142
- export interface CustomMessageHandler {
143
- /**
144
- * Handle a CDP message coming from the device.
145
- * This is invoked before the message is sent to the debugger.
146
- * When returning true, the message is considered handled and will not be sent to the debugger.
147
- */
148
- handleDeviceMessage(message: JSONSerializable): boolean;
149
- /**
150
- * Handle a CDP message coming from the debugger.
151
- * This is invoked before the message is sent to the device.
152
- * When returning true, the message is considered handled and will not be sent to the device.
153
- */
154
- handleDebuggerMessage(message: JSONSerializable): boolean;
155
- }
156
- export {};
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/modules/dev/dev-server/inspector/types.ts"],"names":[],"mappings":""}
@@ -1,14 +0,0 @@
1
- import WS from "ws";
2
- import type { EventReporter } from "../../types";
3
- import type { Device } from "../../device";
4
- interface DebuggerConnectionServerConfig {
5
- devices: Map<string, Device>;
6
- eventReporter: EventReporter | null;
7
- startHeartbeat: (socket: WS, intervalMs: number) => void;
8
- }
9
- export default class DebuggerConnectionServer {
10
- #private;
11
- constructor({ devices, eventReporter, startHeartbeat, }: DebuggerConnectionServerConfig);
12
- createServer(): WS.Server;
13
- }
14
- export {};
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_url_1 = __importDefault(require("node:url"));
7
- const ws_1 = __importDefault(require("ws"));
8
- const debug = require("debug")("Metro:InspectorProxy");
9
- const INTERNAL_ERROR_CODE = 1011;
10
- const DEBUGGER_HEARTBEAT_INTERVAL_MS = 10000;
11
- const MAX_PONG_LATENCY_MS = 5000;
12
- class DebuggerConnectionServer {
13
- #devices;
14
- #eventReporter;
15
- #startHeartbeat;
16
- constructor({ devices, eventReporter, startHeartbeat, }) {
17
- this.#devices = devices;
18
- this.#eventReporter = eventReporter;
19
- this.#startHeartbeat = startHeartbeat;
20
- }
21
- createServer() {
22
- const wss = new ws_1.default.Server({
23
- noServer: true,
24
- perMessageDeflate: false,
25
- // Don't crash on exceptionally large messages - assume the debugger is
26
- // well-behaved and the device is prepared to handle large messages.
27
- maxPayload: 0,
28
- });
29
- wss.on("connection", async (socket, req) => {
30
- console.log("debugger-connection onConnection", req.url);
31
- try {
32
- const query = node_url_1.default.parse(req.url || "", true).query || {};
33
- const deviceId = query.device;
34
- const pageId = query.page;
35
- if (deviceId == null || pageId == null) {
36
- throw new Error("Incorrect URL - must provide device and page IDs");
37
- }
38
- const device = this.#devices.get(deviceId);
39
- if (device == null) {
40
- throw new Error(`Unknown device with ID ${deviceId}`);
41
- }
42
- this.#startHeartbeat(socket, DEBUGGER_HEARTBEAT_INTERVAL_MS);
43
- device.handleDebuggerConnection(socket, pageId, {
44
- userAgent: Array.isArray(req.headers["user-agent"])
45
- ? req.headers["user-agent"][0]
46
- : req.headers["user-agent"] || query.userAgent || null,
47
- });
48
- }
49
- catch (e) {
50
- console.error(e);
51
- socket.close(INTERNAL_ERROR_CODE, e?.toString() ?? "Unknown error");
52
- this.#eventReporter?.logEvent({
53
- type: "connect_debugger_frontend",
54
- status: "error",
55
- error: e,
56
- });
57
- }
58
- });
59
- return wss;
60
- }
61
- }
62
- exports.default = DebuggerConnectionServer;
63
- //# sourceMappingURL=debugger-connection.server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debugger-connection.server.js","sourceRoot":"","sources":["../../../../../../../src/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.ts"],"names":[],"mappings":";;;;;AAAA,wDAA2B;AAC3B,4CAAoB;AAIpB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAEvD,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAQjC,MAAqB,wBAAwB;IAC5C,QAAQ,CAAsB;IAC9B,cAAc,CAAuB;IACrC,eAAe,CAA2C;IAE1D,YAAY,EACX,OAAO,EACP,aAAa,EACb,cAAc,GACkB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,YAAY;QACX,MAAM,GAAG,GAAG,IAAI,YAAE,CAAC,MAAM,CAAC;YACzB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,KAAK;YACxB,uEAAuE;YACvE,oEAAoE;YACpE,UAAU,EAAE,CAAC;SACb,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC1C,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,kBAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA4B,CAAC;gBACpD,MAAM,MAAM,GAAG,KAAK,CAAC,IAA0B,CAAC;gBAEhD,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACxC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACrE,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;gBACvD,CAAC;gBAED,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;gBAE7D,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE;oBAC/C,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAClD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC9B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI;iBACvD,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,eAAe,CAAC,CAAC;gBACpE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;oBAC7B,IAAI,EAAE,2BAA2B;oBACjC,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,CAAC;iBACR,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACZ,CAAC;CACD;AA5DD,2CA4DC"}
@@ -1,19 +0,0 @@
1
- import WS from "ws";
2
- import { Device } from "../../device";
3
- import type { EventReporter, CreateCustomMessageHandlerFn } from "../../types";
4
- interface DeviceCounter {
5
- value: number;
6
- }
7
- interface DeviceConnectionServerConfig {
8
- devices: Map<string, Device>;
9
- deviceCounter: DeviceCounter;
10
- projectRoot: string;
11
- eventReporter?: EventReporter;
12
- customMessageHandler: CreateCustomMessageHandlerFn | null;
13
- }
14
- export default class DeviceConnectionServer {
15
- #private;
16
- constructor({ devices, deviceCounter, projectRoot, eventReporter, customMessageHandler, }: DeviceConnectionServerConfig);
17
- createServer(): WS.Server;
18
- }
19
- export {};
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const ws_1 = __importDefault(require("ws"));
7
- const node_url_1 = __importDefault(require("node:url"));
8
- const device_1 = require("../../device");
9
- const debug = require("debug")("Metro:InspectorProxy");
10
- const INTERNAL_ERROR_CODE = 1011;
11
- class DeviceConnectionServer {
12
- #devices;
13
- #deviceCounter;
14
- #projectRoot;
15
- #eventReporter;
16
- #customMessageHandler;
17
- constructor({ devices, deviceCounter, projectRoot, eventReporter, customMessageHandler, }) {
18
- this.#devices = devices;
19
- this.#deviceCounter = deviceCounter;
20
- this.#projectRoot = projectRoot;
21
- this.#eventReporter = eventReporter;
22
- this.#customMessageHandler = customMessageHandler;
23
- }
24
- createServer() {
25
- const wss = new ws_1.default.Server({
26
- noServer: true,
27
- perMessageDeflate: true,
28
- maxPayload: 0,
29
- });
30
- wss.on("connection", async (socket, req) => {
31
- console.log("device-connection onConnection", req.url);
32
- try {
33
- const fallbackDeviceId = String(this.#deviceCounter.value++);
34
- const query = node_url_1.default.parse(req.url || "", true).query || {};
35
- const deviceId = query.device || fallbackDeviceId;
36
- const deviceName = query.name || "Unknown";
37
- const appName = query.app || "Unknown";
38
- const oldDevice = this.#devices.get(deviceId);
39
- let newDevice;
40
- if (oldDevice) {
41
- oldDevice.dangerouslyRecreateDevice(deviceId, deviceName, appName, socket, this.#projectRoot, this.#eventReporter);
42
- newDevice = oldDevice;
43
- }
44
- else {
45
- newDevice = new device_1.Device(deviceId, deviceName, appName, socket, this.#projectRoot, this.#eventReporter);
46
- }
47
- this.#devices.set(deviceId, newDevice);
48
- debug(`Got new connection: name=${deviceName}, app=${appName}, device=${deviceId}`);
49
- socket.on("close", () => {
50
- const device = this.#devices.get(deviceId);
51
- if (device?.dangerouslyGetSocket() === socket) {
52
- this.#devices.delete(deviceId);
53
- }
54
- debug(`Device ${deviceName} disconnected.`);
55
- });
56
- }
57
- catch (e) {
58
- console.error("error", e);
59
- socket.close(INTERNAL_ERROR_CODE, e?.toString() ?? "Unknown error");
60
- }
61
- });
62
- return wss;
63
- }
64
- }
65
- exports.default = DeviceConnectionServer;
66
- //# sourceMappingURL=device-connection.server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-connection.server.js","sourceRoot":"","sources":["../../../../../../../src/modules/dev/dev-server/inspector/wss/servers/device-connection.server.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare const devtoolsPlugin: any;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.devtoolsPlugin = void 0;
7
- const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
8
- const open_1 = __importDefault(require("open"));
9
- exports.devtoolsPlugin = (0, fastify_plugin_1.default)(async (instance, options) => {
10
- instance.route({
11
- method: ["GET", "POST", "PUT"],
12
- url: "/reload",
13
- handler: (_request, reply) => {
14
- console.log("Reload endpoint hit", instance.wss.messageServer.broadcast != null);
15
- instance.wss.messageServer.broadcast("reload");
16
- reply.send("OK");
17
- },
18
- });
19
- instance.route({
20
- method: ["GET", "POST", "PUT"],
21
- url: "/launch-js-devtools",
22
- handler: async (request, reply) => {
23
- const customDebugger = process.env.REACT_DEBUGGER;
24
- if (customDebugger) {
25
- // NOOP for now
26
- // TODO implement opening teardown here
27
- }
28
- else if (!instance.wss.debuggerServer.isDebuggerConnected()) {
29
- const url = `${options.https ? "https" : "http"}://${options.host || "localhost"}:${options.port}/debugger-ui`;
30
- try {
31
- request.log.info({ msg: "Opening debugger UI", url });
32
- await (0, open_1.default)(url);
33
- }
34
- catch (error) {
35
- if (error) {
36
- request.log.error({
37
- msg: "Cannot open debugger UI",
38
- url,
39
- error,
40
- });
41
- }
42
- }
43
- }
44
- reply.send("OK");
45
- },
46
- });
47
- }, {
48
- name: "devtools-plugin",
49
- dependencies: ["wss-plugin"],
50
- });
51
- //# sourceMappingURL=devtools.plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools.plugin.js","sourceRoot":"","sources":["../../../../../src/modules/dev/dev-server/plugins/devtools.plugin.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA2C;AAC3C,gDAAwB;AAWX,QAAA,cAAc,GAAG,IAAA,wBAAa,EAC1C,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAC3B,QAAQ,CAAC,KAAK,CAAC;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;QAC9B,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CACV,qBAAqB,EACrB,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAC5C,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;KACD,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,CAAC;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;QAC9B,GAAG,EAAE,qBAAqB;QAC1B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAClD,IAAI,cAAc,EAAE,CAAC;gBACpB,eAAe;gBACf,uCAAuC;YACxC,CAAC;iBAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAC9C,OAAO,CAAC,IAAI,IAAI,WACjB,IAAI,OAAO,CAAC,IAAI,cAAc,CAAC;gBAC/B,IAAI,CAAC;oBACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;oBACtD,MAAM,IAAA,cAAI,EAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,KAAK,EAAE,CAAC;wBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;4BACjB,GAAG,EAAE,yBAAyB;4BAC9B,GAAG;4BACH,KAAK;yBACL,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,EACD;IACC,IAAI,EAAE,iBAAiB;IACvB,YAAY,EAAE,CAAC,YAAY,CAAC;CAC5B,CACD,CAAC"}
@@ -1 +0,0 @@
1
- export declare const faviconPlugin: any;