@granite-js/mpack 0.1.23 → 0.1.25

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @granite-js/mpack
2
2
 
3
+ ## 0.1.25
4
+
5
+ ### Patch Changes
6
+
7
+ - @granite-js/devtools-frontend@0.1.25
8
+ - @granite-js/plugin-core@0.1.25
9
+ - @granite-js/utils@0.1.25
10
+
11
+ ## 0.1.24
12
+
13
+ ### Patch Changes
14
+
15
+ - 6e42c3d: add inspectorProxy options
16
+ - Updated dependencies [6e42c3d]
17
+ - @granite-js/plugin-core@0.1.24
18
+ - @granite-js/devtools-frontend@0.1.24
19
+ - @granite-js/utils@0.1.24
20
+
3
21
  ## 0.1.23
4
22
 
5
23
  ### Patch Changes
@@ -80,7 +80,7 @@ async function runServer({
80
80
  }
81
81
  };
82
82
  const resolvedConfig = await (0, import_plugin_core.resolveConfig)(config);
83
- const { middlewares = [], ...additionalMetroConfig } = resolvedConfig?.metro ?? {};
83
+ const { middlewares = [], inspectorProxy, ...additionalMetroConfig } = resolvedConfig?.metro ?? {};
84
84
  const baseConfig = await (0, import_getMetroConfig.getMetroConfig)({ rootPath: config.cwd }, additionalMetroConfig);
85
85
  const metroConfig = mergeConfig(baseConfig, {
86
86
  server: { port },
@@ -126,7 +126,8 @@ async function runServer({
126
126
  await driver.devServer.pre({ host, port });
127
127
  const serverInstance = await Metro.runServer(metroConfig, {
128
128
  host,
129
- websocketEndpoints
129
+ websocketEndpoints,
130
+ inspectorProxyDelegate: inspectorProxy?.delegate
130
131
  });
131
132
  serverInstance.keepAliveTimeout = 3e4;
132
133
  }
@@ -99,7 +99,7 @@ class DevServer {
99
99
  async setup(app) {
100
100
  const baseRoot = this.devServerOptions.rootDir;
101
101
  const serverBaseUrl = this.getBaseUrl();
102
- const debuggerEventHandler = new import_DebuggerEventHandler.DebuggerEventHandler();
102
+ const debuggerEventHandler = new import_DebuggerEventHandler.DebuggerEventHandler(this.devServerOptions.inspectorProxy?.delegate);
103
103
  const inspectorProxy = new import_dev_middleware.InspectorProxy({ root: baseRoot, serverBaseUrl });
104
104
  const inspectorProxyWss = inspectorProxy.createWebSocketServers({
105
105
  onDeviceWebSocketConnected: (socket) => {
@@ -1,6 +1,9 @@
1
+ import type { InspectorProxyConfig } from '@granite-js/plugin-core';
1
2
  import * as ws from 'ws';
2
3
  export declare class DebuggerEventHandler {
4
+ private delegate?;
3
5
  private networkResponseData;
6
+ constructor(delegate?: InspectorProxyConfig['delegate']);
4
7
  setDeviceWebSocketHandler(socket: ws.WebSocket): void;
5
8
  setDebuggerWebSocketHandler(socket: ws.WebSocket): void;
6
9
  /**
@@ -35,6 +35,9 @@ var import_debug = __toESM(require("debug"));
35
35
  var import_parseDomain = require("./parseDomain");
36
36
  const debug = (0, import_debug.default)("dev-server:debugger");
37
37
  class DebuggerEventHandler {
38
+ constructor(delegate) {
39
+ this.delegate = delegate;
40
+ }
38
41
  networkResponseData = /* @__PURE__ */ new Map();
39
42
  setDeviceWebSocketHandler(socket) {
40
43
  socket.on("message", (message) => this.handleDeviceMessage(socket, message));
@@ -92,12 +95,15 @@ class DebuggerEventHandler {
92
95
  return null;
93
96
  }
94
97
  }
95
- handleDeviceMessage(_socket, message) {
98
+ handleDeviceMessage(socket, message) {
96
99
  const customEvent = this.safetyParseCustomEvent(message);
97
100
  if (customEvent == null) {
98
101
  return;
99
102
  }
100
103
  debug("handleDeviceMessage", customEvent);
104
+ if (this.delegate?.onDeviceMessage?.(customEvent, socket)) {
105
+ return;
106
+ }
101
107
  switch (customEvent.method) {
102
108
  case "Bedrock.networkResponseData":
103
109
  case "Granite.networkResponseData":
@@ -106,17 +112,22 @@ class DebuggerEventHandler {
106
112
  }
107
113
  }
108
114
  handleDebuggerMessage(socket, message) {
109
- let handled = true;
115
+ let handled;
110
116
  const debuggerEvent = this.safetyParseDebuggerEvent(message);
111
117
  if (debuggerEvent == null) {
112
118
  return;
113
119
  }
114
- switch (debuggerEvent.method) {
115
- case "Network.getResponseBody":
116
- this.handleGetResponseBody(socket, debuggerEvent);
117
- break;
118
- default:
119
- handled = false;
120
+ if (this.delegate?.onDebuggerMessage?.(debuggerEvent, socket)) {
121
+ handled = true;
122
+ } else {
123
+ switch (debuggerEvent.method) {
124
+ case "Network.getResponseBody":
125
+ this.handleGetResponseBody(socket, debuggerEvent);
126
+ handled = true;
127
+ break;
128
+ default:
129
+ handled = false;
130
+ }
120
131
  }
121
132
  if (handled) {
122
133
  debug("handleDebuggerMessage", debuggerEvent);
@@ -1,4 +1,4 @@
1
- import type { Middleware, BuildConfig } from '@granite-js/plugin-core';
1
+ import type { Middleware, BuildConfig, InspectorProxyConfig } from '@granite-js/plugin-core';
2
2
  import type { Bundler } from '../bundler';
3
3
  import type { BuildStatusProgressBar } from '../utils/progressBar';
4
4
  export type Platform = 'android' | 'ios';
@@ -8,6 +8,7 @@ export interface DevServerOptions {
8
8
  port?: number;
9
9
  buildConfig: Omit<BuildConfig, 'platform' | 'outfile'>;
10
10
  middlewares?: Middleware[];
11
+ inspectorProxy?: InspectorProxyConfig;
11
12
  }
12
13
  export interface DevServerContext {
13
14
  rootDir: string;
@@ -94,6 +94,8 @@ exports.runServer = async (config, {
94
94
  // deprecated
95
95
  secureKey,
96
96
  // deprecated
97
+ inspectorProxyDelegate,
98
+ // MARK: - GRANITE
97
99
  waitForBundler = false,
98
100
  websocketEndpoints = {}
99
101
  }) => {
@@ -113,7 +115,7 @@ exports.runServer = async (config, {
113
115
  serverApp.use(middleware);
114
116
  let inspectorProxy = null;
115
117
  if (config.server.runInspectorProxy) {
116
- inspectorProxy = new InspectorProxy(config.projectRoot);
118
+ inspectorProxy = new InspectorProxy(config.projectRoot, inspectorProxyDelegate);
117
119
  }
118
120
  let httpServer;
119
121
  if (secure || secureServerOptions != null) {
@@ -55,15 +55,18 @@ class Device {
55
55
  // Root of the project used for relative to absolute source path conversion.
56
56
  _projectRoot;
57
57
  // MARK: - GRANITE
58
+ _delegate;
59
+ // MARK: - GRANITE
58
60
  // 네트워크 응답 데이터 저장하기 위한 변수 (key: requestId, value: { data: string, base64Encoded: bool })
59
61
  _networkResponseData = /* @__PURE__ */ new Map();
60
- constructor(id, name, app, socket, projectRoot) {
62
+ constructor(id, name, app, socket, projectRoot, delegate) {
61
63
  this._id = id;
62
64
  this._name = name;
63
65
  this._app = app;
64
66
  this._pages = [];
65
67
  this._deviceSocket = socket;
66
68
  this._projectRoot = projectRoot;
69
+ this._delegate = delegate;
67
70
  this._deviceSocket.on("message", (message) => {
68
71
  const parsedMessage = JSON.parse(message);
69
72
  if (parsedMessage.event === "getPages") {
@@ -254,6 +257,9 @@ class Device {
254
257
  }
255
258
  // Allows to make changes in incoming message from device.
256
259
  _processMessageFromDevice(payload, debuggerInfo) {
260
+ if (this._delegate?.onDeviceMessage?.(payload, debuggerInfo.socket)) {
261
+ return;
262
+ }
257
263
  if (payload.method === "Debugger.scriptParsed") {
258
264
  const params = payload.params || {};
259
265
  if ("sourceMapURL" in params) {
@@ -314,6 +320,9 @@ class Device {
314
320
  // Allows to make changes in incoming messages from debugger.
315
321
  _interceptMessageFromDebugger(req, debuggerInfo) {
316
322
  let response = null;
323
+ if (this._delegate?.onDebuggerMessage?.(req, debuggerInfo.socket)) {
324
+ return null;
325
+ }
317
326
  if (req.method === "Debugger.setBreakpointByUrl") {
318
327
  this._processDebuggerSetBreakpointByUrl(req, debuggerInfo);
319
328
  } else if (req.method === "Debugger.getScriptSource") {
@@ -322,25 +331,22 @@ class Device {
322
331
  result: this._processDebuggerGetScriptSource(req)
323
332
  };
324
333
  } else if (req.method === "Network.getResponseBody") {
325
- return this._processDebuggerGetResponseBody(req, debuggerInfo.socket);
334
+ response = this._processDebuggerGetResponseBody(req, debuggerInfo.socket);
326
335
  }
327
336
  return response;
328
337
  }
329
338
  // MARK: - GRANITE
330
- _processDebuggerGetResponseBody(req, socket) {
339
+ _processDebuggerGetResponseBody(req) {
331
340
  const { requestId } = req.params;
332
341
  if (this._networkResponseData.has(requestId)) {
333
342
  const responseData = this._networkResponseData.get(requestId);
334
343
  this._networkResponseData.delete(requestId);
335
- socket.send(
336
- JSON.stringify({
337
- id: req.id,
338
- result: this._createNetworkResponseData(responseData)
339
- })
340
- );
341
- return true;
344
+ return {
345
+ id: req.id,
346
+ result: this._createNetworkResponseData(responseData)
347
+ };
342
348
  }
343
- return false;
349
+ return null;
344
350
  }
345
351
  // MARK: - GRANITE
346
352
  _createNetworkResponseData(responseData) {
@@ -12,6 +12,8 @@ const INTERNAL_ERROR_CODE = 1011;
12
12
  class InspectorProxy {
13
13
  // MARK: - GRANITE
14
14
  static devices;
15
+ // MARK: - GRANITE
16
+ _delegate;
15
17
  // Root of the project used for relative to absolute source path conversion.
16
18
  _projectRoot;
17
19
  // MARK: - GRANITE
@@ -24,8 +26,9 @@ class InspectorProxy {
24
26
  // (devtoolsFrontendUrl and webSocketDebuggerUrl) for page descriptions. These URLs are used
25
27
  // by debugger to know where to connect.
26
28
  _serverAddressWithPort = "";
27
- constructor(projectRoot) {
29
+ constructor(projectRoot, delegate) {
28
30
  this._projectRoot = projectRoot;
31
+ this._delegate = delegate;
29
32
  InspectorProxy.devices = /* @__PURE__ */ new Map();
30
33
  }
31
34
  // Process HTTP request sent to server. We only respond to 2 HTTP requests:
@@ -106,7 +109,10 @@ class InspectorProxy {
106
109
  const deviceName = query.name || "Unknown";
107
110
  const appName = query.app || "Unknown";
108
111
  const deviceId = this._deviceCounter++;
109
- InspectorProxy.devices.set(deviceId, new Device(deviceId, deviceName, appName, socket, this._projectRoot));
112
+ InspectorProxy.devices.set(
113
+ deviceId,
114
+ new Device(deviceId, deviceName, appName, socket, this._projectRoot, this._delegate)
115
+ );
110
116
  debug(`Got new connection: device=${deviceName}, app=${appName}`);
111
117
  socket.on("close", () => {
112
118
  InspectorProxy.devices.delete(deviceId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@granite-js/mpack",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "description": "A bundler for Granite apps",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -84,9 +84,9 @@
84
84
  "@babel/traverse": "^7.14.0",
85
85
  "@babel/types": "^7.0.0",
86
86
  "@fastify/static": "7.0.1",
87
- "@granite-js/devtools-frontend": "0.1.23",
88
- "@granite-js/plugin-core": "0.1.23",
89
- "@granite-js/utils": "0.1.23",
87
+ "@granite-js/devtools-frontend": "0.1.25",
88
+ "@granite-js/plugin-core": "0.1.25",
89
+ "@granite-js/utils": "0.1.25",
90
90
  "@inquirer/prompts": "^7.2.3",
91
91
  "@react-native-community/cli-plugin-metro": "11.3.7",
92
92
  "@react-native-community/cli-server-api": "11.3.7",