about summary refs log tree commit diff
path: root/patches/metro+0.76.8.patch
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2023-11-02 18:48:07 +0000
committerGitHub <noreply@github.com>2023-11-02 18:48:07 +0000
commit0e8723c3bb9566542f009994484b30c3da72ede7 (patch)
tree1f3db7484818d63672da264e78e6cda3aa04d149 /patches/metro+0.76.8.patch
parent237bce391b1cf0708df6b137a418725a4029bb6c (diff)
downloadvoidsky-0e8723c3bb9566542f009994484b30c3da72ede7.tar.zst
Patch facebook/metro#1130 to profile module init (#1796)
Diffstat (limited to 'patches/metro+0.76.8.patch')
-rw-r--r--patches/metro+0.76.8.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/patches/metro+0.76.8.patch b/patches/metro+0.76.8.patch
new file mode 100644
index 000000000..f8ef67c84
--- /dev/null
+++ b/patches/metro+0.76.8.patch
@@ -0,0 +1,44 @@
+diff --git a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
+index 48a1409..ef185c9 100644
+--- a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
++++ b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js
+@@ -70,14 +70,19 @@ function wrapModule(
+   importDefaultName,
+   importAllName,
+   dependencyMapName,
+-  globalPrefix
++  globalPrefix,
++  moduleFactoryName
+ ) {
+   const params = buildParameters(
+     importDefaultName,
+     importAllName,
+     dependencyMapName
+   );
+-  const factory = functionFromProgram(fileAst.program, params);
++  const factory = functionFromProgram(
++    fileAst.program,
++    params,
++    moduleFactoryName
++  );
+   const def = t.callExpression(t.identifier(`${globalPrefix}__d`), [factory]);
+   const ast = t.file(t.program([t.expressionStatement(def)]));
+   const requireName = renameRequires(ast);
+@@ -107,7 +112,16 @@ function wrapJson(source, globalPrefix) {
+     "});",
+   ].join("\n");
+ }
+-function functionFromProgram(program, parameters) {
++const JS_INVALID_IDENT_RE = /[^a-zA-Z0-9$_]/g;
++function functionFromProgram(program, parameters, moduleFactoryName) {
++  let identifier;
++  if (typeof moduleFactoryName === "string" && moduleFactoryName !== "") {
++    // Keep the name readable so it shows up in profiler traces.
++    // Add an unlikely suffix to avoid collisions with the module code.
++    identifier = t.identifier(
++      `${moduleFactoryName.replace(JS_INVALID_IDENT_RE, "_")}__module_factory__`
++    );
++  }
+   return t.functionExpression(
+     undefined,
+     parameters.map(makeIdentifier),