@forge/bundler

7.0.2-next.3-experimental-fda9df67.0.2-next.6
out/dependencies.js
~out/dependencies.jsModified
+26−10
Index: package/out/dependencies.js
===================================================================
--- package/out/dependencies.js
+++ package/out/dependencies.js
@@ -1,6 +1,8 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
+exports.DEFAULT_COPY_DEPENDENCIES_OPTIONS = void 0;
+exports.getProductionDependencies = getProductionDependencies;
 exports.copyProductionDependencies = copyProductionDependencies;
 const tslib_1 = require("tslib");
 const fs_1 = require("fs");
 const promises_1 = require("fs/promises");
@@ -24,13 +26,17 @@
         }
     }
     return null;
 }
-function transplantDir(source, destination, directory) {
-    const relative = path_1.default.relative(source, directory);
-    return path_1.default.join(destination, relative);
+exports.DEFAULT_COPY_DEPENDENCIES_OPTIONS = {
+    exclude: ['@forge/react', '@forge/bridge']
+};
+async function getProductionDependencies(moduleDir, options) {
+    const result = new Map();
+    await enumerateProductionDependencies(moduleDir, options ?? {}, moduleDir, result, new Set());
+    return result;
 }
-async function copyProductionDependencies(moduleDir, target, options) {
+async function enumerateProductionDependencies(moduleDir, options, root, result, visited) {
     const packageDef = await readPackageJSON(moduleDir);
     if (!packageDef) {
         return;
     }
@@ -40,15 +46,25 @@
             continue;
         }
         const source = await dependencyDir(moduleDir, dependency);
         if (source) {
-            const destination = transplantDir(moduleDir, target, source);
-            if ((0, fs_1.existsSync)(destination)) {
+            const destination = path_1.default.relative(root, source);
+            if (visited.has(destination)) {
                 continue;
             }
-            await (0, fs_extra_1.copy)(source, destination, {
-                filter: (src) => path_1.default.basename(src) !== common_1.NODE_MODULES_DIR
-            });
-            await copyProductionDependencies(source, destination, options);
+            visited.add(destination);
+            for (const entry of await (0, promises_1.readdir)(source)) {
+                if (entry === common_1.NODE_MODULES_DIR) {
+                    continue;
+                }
+                result.set(path_1.default.join(destination, entry), path_1.default.join(source, entry));
+            }
+            await enumerateProductionDependencies(source, options, root, result, visited);
         }
     }
 }
+async function copyProductionDependencies(moduleDir, target, options) {
+    const dependencies = await getProductionDependencies(moduleDir, options);
+    for (const [destination, source] of dependencies.entries()) {
+        await (0, fs_extra_1.copy)(source, path_1.default.join(target, destination));
+    }
+}