@teardown/cli 1.2.38 → 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 (182) 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.js +0 -55
  145. package/dist/commands/init/init-teardown.js +0 -26
  146. package/dist/index.js +0 -20
  147. package/dist/modules/dev/dev-menu/keyboard-handler.js +0 -138
  148. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js +0 -105
  149. package/dist/modules/dev/dev-server/cdp/cdp.adapter.js +0 -12
  150. package/dist/modules/dev/dev-server/cdp/index.js +0 -18
  151. package/dist/modules/dev/dev-server/cdp/types.js +0 -2
  152. package/dist/modules/dev/dev-server/dev-server-checker.js +0 -72
  153. package/dist/modules/dev/dev-server/dev-server.js +0 -269
  154. package/dist/modules/dev/dev-server/inspector/device.event-reporter.js +0 -165
  155. package/dist/modules/dev/dev-server/inspector/device.js +0 -577
  156. package/dist/modules/dev/dev-server/inspector/inspector.js +0 -204
  157. package/dist/modules/dev/dev-server/inspector/types.js +0 -2
  158. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js +0 -61
  159. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js +0 -64
  160. package/dist/modules/dev/dev-server/plugins/devtools.plugin.js +0 -50
  161. package/dist/modules/dev/dev-server/plugins/favicon.plugin.js +0 -19
  162. package/dist/modules/dev/dev-server/plugins/multipart.plugin.js +0 -62
  163. package/dist/modules/dev/dev-server/plugins/systrace.plugin.js +0 -28
  164. package/dist/modules/dev/dev-server/plugins/types.js +0 -2
  165. package/dist/modules/dev/dev-server/plugins/wss/index.js +0 -19
  166. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js +0 -66
  167. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js +0 -128
  168. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js +0 -75
  169. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js +0 -198
  170. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js +0 -120
  171. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js +0 -357
  172. package/dist/modules/dev/dev-server/plugins/wss/types.js +0 -2
  173. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js +0 -57
  174. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js +0 -26
  175. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js +0 -46
  176. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js +0 -55
  177. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js +0 -36
  178. package/dist/modules/dev/dev-server/sybmolicate/types.js +0 -2
  179. package/dist/modules/dev/terminal/base.terminal.reporter.js +0 -78
  180. package/dist/modules/dev/terminal/terminal.reporter.js +0 -76
  181. package/dist/modules/dev/types.js +0 -2
  182. package/dist/modules/dev/utils/log.js +0 -73
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./cdp.adapter"), exports);
18
- __exportStar(require("./types"), exports);
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,72 +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.DevServerChecker = exports.DevServerStatusEnum = exports.DevServerStatusResultEnum = void 0;
7
- const bun_1 = require("bun");
8
- const node_net_1 = __importDefault(require("node:net"));
9
- var DevServerStatusResultEnum;
10
- (function (DevServerStatusResultEnum) {
11
- DevServerStatusResultEnum["PACKAGER_STATUS_RUNNING"] = "packager-status:running";
12
- })(DevServerStatusResultEnum || (exports.DevServerStatusResultEnum = DevServerStatusResultEnum = {}));
13
- var DevServerStatusEnum;
14
- (function (DevServerStatusEnum) {
15
- DevServerStatusEnum["NOT_RUNNING"] = "not_running";
16
- DevServerStatusEnum["MATCHED_SERVER_RUNNING"] = "matched_server_running";
17
- DevServerStatusEnum["PORT_TAKEN"] = "port_taken";
18
- DevServerStatusEnum["UNKNOWN"] = "unknown";
19
- })(DevServerStatusEnum || (exports.DevServerStatusEnum = DevServerStatusEnum = {}));
20
- class DevServerChecker {
21
- options;
22
- constructor(options) {
23
- this.options = options;
24
- }
25
- getUrl() {
26
- const devServerStatusPath = this.options.devServerStatusPath ?? "/status";
27
- return `${this.options.host}:${this.options.port}${devServerStatusPath}`;
28
- }
29
- async getServerStatus() {
30
- try {
31
- if (!(await this.isPortInUse(this.options.host, this.options.port))) {
32
- return DevServerStatusEnum.NOT_RUNNING;
33
- }
34
- const statusResponse = await (0, bun_1.fetch)(this.getUrl());
35
- const body = await statusResponse.text();
36
- if (body !== DevServerStatusResultEnum.PACKAGER_STATUS_RUNNING) {
37
- return DevServerStatusEnum.PORT_TAKEN;
38
- }
39
- const projectRoot = statusResponse.headers.get("X-React-Native-Project-Root");
40
- if (projectRoot !== this.options.projectRoot) {
41
- return DevServerStatusEnum.PORT_TAKEN;
42
- }
43
- return DevServerStatusEnum.MATCHED_SERVER_RUNNING;
44
- }
45
- catch (error) {
46
- console.error(error);
47
- return DevServerStatusEnum.UNKNOWN;
48
- }
49
- }
50
- async isPortInUse(hostname, port) {
51
- return new Promise((resolve) => {
52
- const server = node_net_1.default.createServer();
53
- server.once("error", (e) => {
54
- console.log("Server error:", e);
55
- server.close();
56
- if (e.code === "EADDRINUSE") {
57
- resolve(true);
58
- }
59
- else {
60
- // For any other errors, assume port is not in use
61
- resolve(false);
62
- }
63
- });
64
- server.once("listening", () => {
65
- server.close();
66
- resolve(false);
67
- });
68
- server.listen(port, hostname);
69
- });
70
- }
71
- }
72
- exports.DevServerChecker = DevServerChecker;
@@ -1,269 +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.DevServer = void 0;
7
- exports.makeLogEntryFromFastifyLog = makeLogEntryFromFastifyLog;
8
- const compress_1 = __importDefault(require("@fastify/compress"));
9
- const cors_1 = __importDefault(require("@fastify/cors"));
10
- const middie_1 = __importDefault(require("@fastify/middie"));
11
- const sensible_1 = __importDefault(require("@fastify/sensible"));
12
- const cli_server_api_1 = require("@react-native-community/cli-server-api");
13
- const metro_config_1 = require("@react-native/metro-config");
14
- const fastify_1 = __importDefault(require("fastify"));
15
- const metro_1 = __importDefault(require("metro"));
16
- const node_stream_1 = require("node:stream");
17
- const keyboard_handler_1 = require("../dev-menu/keyboard-handler");
18
- const terminal_reporter_1 = require("../terminal/terminal.reporter");
19
- const inspector_1 = require("./inspector/inspector");
20
- const devtools_plugin_1 = require("./plugins/devtools.plugin");
21
- const favicon_plugin_1 = require("./plugins/favicon.plugin");
22
- const multipart_plugin_1 = require("./plugins/multipart.plugin");
23
- const systrace_plugin_1 = require("./plugins/systrace.plugin");
24
- const wss_1 = require("./plugins/wss");
25
- const web_socket_api_server_1 = require("./plugins/wss/servers/web-socket-api.server");
26
- const web_socket_events_server_1 = require("./plugins/wss/servers/web-socket-events.server");
27
- const web_socket_message_server_1 = require("./plugins/wss/servers/web-socket-message.server");
28
- const sybmolicate_plugin_1 = require("./sybmolicate/sybmolicate.plugin");
29
- class DevServer {
30
- config;
31
- terminalReporter;
32
- stream;
33
- instance;
34
- apiServer;
35
- messageServer;
36
- eventsServer;
37
- keyboardHandler;
38
- inspector;
39
- constructor(config) {
40
- this.config = config;
41
- this.terminalReporter = new terminal_reporter_1.TeardownTerminalReporter(this);
42
- this.stream = new node_stream_1.Writable({
43
- write: this.onWrite.bind(this),
44
- });
45
- this.instance = (0, fastify_1.default)({
46
- // disableRequestLogging: true,
47
- logger: {
48
- level: "trace",
49
- stream: this.stream,
50
- },
51
- ...(config.https ? { https: config.https } : undefined),
52
- });
53
- this.apiServer = new web_socket_api_server_1.WebSocketApiServer(this.instance);
54
- this.messageServer = new web_socket_message_server_1.WebSocketMessageServer(this.instance);
55
- this.eventsServer = new web_socket_events_server_1.WebSocketEventsServer(this.instance, {
56
- webSocketMessageServer: this.messageServer,
57
- });
58
- this.keyboardHandler = new keyboard_handler_1.KeyboardHandlerManager(this);
59
- this.inspector = new inspector_1.Inspector({
60
- projectRoot: this.config.projectRoot,
61
- serverBaseUrl: this.getDevServerUrl(),
62
- // eventReporter: this.terminalReporter,
63
- });
64
- }
65
- async onWrite(chunk, encoding, callback) {
66
- if (chunk == null) {
67
- return;
68
- }
69
- const log = JSON.parse(chunk.toString());
70
- this.apiServer.send(log);
71
- callback();
72
- }
73
- getDevServerUrl() {
74
- const https = this.config.https ? "https" : "http";
75
- return `${https}://${this.config.host}:${this.config.port}`;
76
- }
77
- onInitializeDone() {
78
- this.keyboardHandler.initialize();
79
- }
80
- reportMetroEvent(event) {
81
- this.apiServer.send({
82
- type: "metro_event",
83
- event,
84
- });
85
- switch (event.type) {
86
- case "client_log":
87
- this.eventsServer.broadcastEvent(event);
88
- break;
89
- }
90
- }
91
- onBundleBuilt(bundlePath) {
92
- // console.log("onBundleBuilt", bundlePath);
93
- // this.messageServer.broadcast("reload");
94
- }
95
- onClientConnected(platform, clientId) {
96
- // this.messageServer.broadcast("reload", undefined, []);
97
- // this.instance.wss.router.onClientConnected(platform, clientId);
98
- // this.onMessage({
99
- // level: 30,
100
- // time: Date.now(),
101
- // pid: 1,
102
- // hostname: "localhost",
103
- // });
104
- }
105
- async loadMetroConfig() {
106
- const config = await metro_1.default.loadConfig({
107
- cwd: this.config.projectRoot,
108
- ...this.config,
109
- });
110
- const reactNativeConfig = (0, metro_config_1.getDefaultConfig)(this.config.projectRoot);
111
- return (0, metro_config_1.mergeConfig)(reactNativeConfig, config);
112
- }
113
- _metroConfig = null;
114
- async getMetroConfig() {
115
- if (!this._metroConfig) {
116
- this._metroConfig = await this.loadMetroConfig();
117
- }
118
- return (0, metro_config_1.mergeConfig)(this._metroConfig, {
119
- reporter: this.terminalReporter,
120
- });
121
- }
122
- async registerPlugins() {
123
- const metroConfig = await this.getMetroConfig();
124
- const serverInstance = await metro_1.default.createConnectMiddleware(metroConfig, {
125
- watch: true,
126
- onBundleBuilt: this.onBundleBuilt.bind(this),
127
- });
128
- const websockets = this.inspector.createWebSocketServers();
129
- // const devMiddleware = createDevMiddleware({
130
- // projectRoot: this.config.projectRoot,
131
- // serverBaseUrl: `http://${this.config.host}:${this.config.port}`,
132
- // logger: this.instance.log,
133
- // unstable_customInspectorMessageHandler:
134
- // this.customInspectorMessageHandler.bind(this),
135
- // unstable_experiments: {
136
- // enableNetworkInspector: true,
137
- // },
138
- // });
139
- // const debuggerConnectionServer = new DebuggerConnectionServer({
140
- // devices: this.devices,
141
- // eventReporter: this.eventReporter,
142
- // startHeartbeat: this.startHeartbeat,
143
- // });
144
- // const deviceConnectionServer = new DeviceConnectionServer(this.instance);
145
- await this.instance.register(cors_1.default, {
146
- origin: "*",
147
- // "localhost",
148
- // "localhost:8081",
149
- // "127.0.0.1",
150
- // "127.0.0.1:8081",
151
- // /localhost:\d+/,
152
- // /127\.0\.0\.1:\d+/,
153
- // ],
154
- // methods: ["GET", "PUT", "POST", "DELETE", "OPTIONS"],
155
- // allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
156
- // credentials: true,
157
- // maxAge: 86400,
158
- // preflight: true,
159
- preflightContinue: true,
160
- });
161
- await this.instance.register(compress_1.default);
162
- await this.instance.register(sensible_1.default);
163
- await this.instance.register(middie_1.default);
164
- await this.instance.register(wss_1.wssPlugin, {
165
- metroConfig,
166
- metroServer: serverInstance.metroServer,
167
- onClientConnected: this.onClientConnected.bind(this),
168
- messageServer: this.messageServer,
169
- eventsServer: this.eventsServer,
170
- apiServer: this.apiServer,
171
- endpoints: {
172
- "/inspector/debug": websockets["/inspector/debug"],
173
- "/inspector/device": websockets["/inspector/device"],
174
- "/inspector/network": websockets["/inspector/debug"],
175
- },
176
- });
177
- await this.instance.register(multipart_plugin_1.multipartPlugin);
178
- await this.instance.register(devtools_plugin_1.devtoolsPlugin, {
179
- host: this.config.host,
180
- port: this.config.port,
181
- https: this.config.https,
182
- });
183
- await this.instance.register(sybmolicate_plugin_1.symbolicatePlugin, {
184
- onSymbolicate: this.onSymbolicate.bind(this),
185
- });
186
- await this.instance.register(systrace_plugin_1.systracePlugin);
187
- await this.instance.register(favicon_plugin_1.faviconPlugin);
188
- // Register middleware
189
- this.instance.use("/open-url", cli_server_api_1.openURLMiddleware);
190
- this.instance.use("/open-stack-frame", (0, cli_server_api_1.openStackFrameInEditorMiddleware)({
191
- watchFolders: [this.config.projectRoot],
192
- }));
193
- this.instance.use(serverInstance.metroServer.processRequest);
194
- this.instance.use((req, resp, next) => this.inspector.handleHttpRequest(req, resp, next));
195
- }
196
- onSymbolicate(request, reply) {
197
- const result = JSON.parse(request.rawBody);
198
- const { codeFrame, stack } = result;
199
- this.instance.log.info("onSymbolicate", { codeFrame, stack });
200
- }
201
- registerHooks() {
202
- this.instance.log.info("Registering hooks");
203
- this.instance = this.instance.addHook("onSend", async (request, reply, payload) => {
204
- reply.header("X-Content-Type-Options", "nosniff");
205
- reply.header("X-React-Native-Project-Root", this.config.projectRoot);
206
- const [pathname] = request.url.split("?");
207
- if (pathname.endsWith(".map")) {
208
- reply.header("Access-Control-Allow-Origin", "devtools://devtools");
209
- }
210
- return payload;
211
- });
212
- this.instance.log.info("Hooks registered");
213
- }
214
- registerRoutes() {
215
- this.instance.log.info("Registering routes");
216
- this.instance.get("/", async () => "React Native packager is running");
217
- this.instance.get("/status", async () => "packager-status:running");
218
- this.instance.log.info("Routes registered");
219
- }
220
- async initialize() {
221
- this.instance.log.info("Initializing dev server");
222
- await this.registerPlugins();
223
- this.registerHooks();
224
- this.registerRoutes();
225
- this.instance.log.info("Dev server initialized");
226
- }
227
- async start() {
228
- this.instance.log.info("Starting dev server", this.config);
229
- await this.instance.listen({
230
- port: this.config.port,
231
- host: this.config.host,
232
- });
233
- this.instance.log.info("Dev server started", this.instance.server.address());
234
- }
235
- async stop() {
236
- this.instance.log.info("Stopping dev server");
237
- await this.instance.close();
238
- this.instance.log.info("Dev server stopped");
239
- }
240
- getInstance() {
241
- return this.instance;
242
- }
243
- }
244
- exports.DevServer = DevServer;
245
- const levelToTypeMapping = {
246
- 10: "debug",
247
- 20: "debug",
248
- 30: "info",
249
- 40: "warn",
250
- 50: "error",
251
- 60: "error",
252
- };
253
- function makeLogEntryFromFastifyLog(data) {
254
- const { level, time, pid, hostname, ...rest } = data;
255
- const levelToTypeMapping = {
256
- 10: "debug",
257
- 20: "debug",
258
- 30: "info",
259
- 40: "warn",
260
- 50: "error",
261
- 60: "error",
262
- };
263
- return {
264
- type: levelToTypeMapping[level] ?? "log",
265
- timestamp: time,
266
- issuer: "",
267
- message: [rest],
268
- };
269
- }
@@ -1,165 +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.DeviceEventReporter = void 0;
7
- const ttlcache_1 = __importDefault(require("@isaacs/ttlcache"));
8
- class DeviceEventReporter {
9
- eventReporter;
10
- metadata;
11
- pendingCommands;
12
- constructor(eventReporter, metadata) {
13
- this.eventReporter = eventReporter;
14
- this.metadata = metadata;
15
- this.pendingCommands = new ttlcache_1.default({
16
- ttl: 10000,
17
- dispose: (command, id, reason) => {
18
- if (reason === "delete" || reason === "set") {
19
- // TODO: Report clobbering ('set') using a dedicated error code
20
- return;
21
- }
22
- this.logExpiredCommand(command);
23
- },
24
- });
25
- }
26
- logRequest(req, origin, metadata) {
27
- this.pendingCommands.set(req.id, {
28
- method: req.method,
29
- requestOrigin: origin,
30
- requestTime: Date.now(),
31
- metadata,
32
- });
33
- }
34
- logResponse(res, origin, metadata) {
35
- const pendingCommand = this.pendingCommands.get(res.id);
36
- if (!pendingCommand) {
37
- this.eventReporter.logEvent({
38
- type: "debugger_command",
39
- protocol: "CDP",
40
- requestOrigin: null,
41
- method: null,
42
- status: "coded_error",
43
- errorCode: "UNMATCHED_REQUEST_ID",
44
- responseOrigin: origin,
45
- timeSinceStart: null,
46
- appId: this.metadata.appId,
47
- deviceId: this.metadata.deviceId,
48
- deviceName: this.metadata.deviceName,
49
- pageId: metadata.pageId,
50
- frontendUserAgent: metadata.frontendUserAgent,
51
- prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
52
- });
53
- return;
54
- }
55
- const timeSinceStart = Date.now() - pendingCommand.requestTime;
56
- this.pendingCommands.delete(res.id);
57
- if (res.error) {
58
- let message = res.error.message;
59
- if ("data" in res.error) {
60
- message += ` (${String(res.error.data)})`;
61
- }
62
- this.eventReporter.logEvent({
63
- type: "debugger_command",
64
- requestOrigin: pendingCommand.requestOrigin,
65
- method: pendingCommand.method,
66
- protocol: "CDP",
67
- status: "coded_error",
68
- errorCode: "PROTOCOL_ERROR",
69
- errorDetails: message,
70
- responseOrigin: origin,
71
- timeSinceStart,
72
- appId: this.metadata.appId,
73
- deviceId: this.metadata.deviceId,
74
- deviceName: this.metadata.deviceName,
75
- pageId: pendingCommand.metadata.pageId,
76
- frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
77
- prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
78
- });
79
- return;
80
- }
81
- this.eventReporter.logEvent({
82
- type: "debugger_command",
83
- protocol: "CDP",
84
- requestOrigin: pendingCommand.requestOrigin,
85
- method: pendingCommand.method,
86
- status: "success",
87
- responseOrigin: origin,
88
- timeSinceStart,
89
- appId: this.metadata.appId,
90
- deviceId: this.metadata.deviceId,
91
- deviceName: this.metadata.deviceName,
92
- pageId: pendingCommand.metadata.pageId,
93
- frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
94
- prefersFuseboxFrontend: metadata.prefersFuseboxFrontend,
95
- });
96
- }
97
- logConnection(connectedEntity, metadata) {
98
- this.eventReporter.logEvent({
99
- type: "connect_debugger_frontend",
100
- status: "success",
101
- appId: this.metadata.appId,
102
- deviceName: this.metadata.deviceName,
103
- deviceId: this.metadata.deviceId,
104
- pageId: metadata.pageId,
105
- frontendUserAgent: metadata.frontendUserAgent,
106
- });
107
- }
108
- logDisconnection(disconnectedEntity) {
109
- const errorCode = disconnectedEntity === "device"
110
- ? "DEVICE_DISCONNECTED"
111
- : "DEBUGGER_DISCONNECTED";
112
- for (const pendingCommand of this.pendingCommands.values()) {
113
- this.eventReporter.logEvent({
114
- type: "debugger_command",
115
- protocol: "CDP",
116
- requestOrigin: pendingCommand.requestOrigin,
117
- method: pendingCommand.method,
118
- status: "coded_error",
119
- errorCode,
120
- responseOrigin: "proxy",
121
- timeSinceStart: Date.now() - pendingCommand.requestTime,
122
- appId: this.metadata.appId,
123
- deviceId: this.metadata.deviceId,
124
- deviceName: this.metadata.deviceName,
125
- pageId: pendingCommand.metadata.pageId,
126
- frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
127
- prefersFuseboxFrontend: pendingCommand.metadata.prefersFuseboxFrontend,
128
- });
129
- }
130
- this.pendingCommands.clear();
131
- }
132
- logProxyMessageHandlingError(messageOrigin, error, message) {
133
- this.eventReporter.logEvent({
134
- type: "proxy_error",
135
- status: "error",
136
- messageOrigin,
137
- message,
138
- error: error.message,
139
- errorStack: error.stack ?? "",
140
- appId: this.metadata.appId,
141
- deviceId: this.metadata.deviceId,
142
- deviceName: this.metadata.deviceName,
143
- pageId: null,
144
- });
145
- }
146
- logExpiredCommand(pendingCommand) {
147
- this.eventReporter.logEvent({
148
- type: "debugger_command",
149
- protocol: "CDP",
150
- requestOrigin: pendingCommand.requestOrigin,
151
- method: pendingCommand.method,
152
- status: "coded_error",
153
- errorCode: "TIMED_OUT",
154
- responseOrigin: "proxy",
155
- timeSinceStart: Date.now() - pendingCommand.requestTime,
156
- appId: this.metadata.appId,
157
- deviceId: this.metadata.deviceId,
158
- deviceName: this.metadata.deviceName,
159
- pageId: pendingCommand.metadata.pageId,
160
- frontendUserAgent: pendingCommand.metadata.frontendUserAgent,
161
- prefersFuseboxFrontend: pendingCommand.metadata.prefersFuseboxFrontend,
162
- });
163
- }
164
- }
165
- exports.DeviceEventReporter = DeviceEventReporter;