npm package diff

Package: @forge/bundler

Versions: 4.20.1-next.6 - 4.20.1-next.7

File: package/out/runtime.js

Index: package/out/runtime.js
===================================================================
--- package/out/runtime.js
+++ package/out/runtime.js
@@ -0,0 +1,82 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.NodeBundler = exports.NODE_RUNTIME_VERSION_FILE = exports.SandboxBundler = void 0;
+const tslib_1 = require("tslib");
+const fs_1 = require("fs");
+const path_1 = tslib_1.__importDefault(require("path"));
+const webpack_1 = tslib_1.__importDefault(require("webpack"));
+var RawSource = webpack_1.default.sources.RawSource;
+const common_1 = require("./config/common");
+const sandbox_1 = require("./config/sandbox");
+const webpack_2 = require("./webpack");
+class SandboxBundler extends webpack_2.WebpackBundler {
+    constructor(logger) {
+        super(logger);
+    }
+    getConfig(args) {
+        return (0, sandbox_1.getSandboxedRuntimeBuildConfig)(args);
+    }
+}
+exports.SandboxBundler = SandboxBundler;
+exports.NODE_RUNTIME_VERSION_FILE = 'runtime.json';
+const NODE_WEBPACK_USER_CODE_DIR = 'bundled';
+class NodeBundler extends webpack_2.WebpackBundler {
+    wrapperProvider;
+    constructor(logger, wrapperProvider) {
+        super(logger);
+        this.wrapperProvider = wrapperProvider;
+    }
+    getOutput(config, stats) {
+        const result = super.getOutput(config, stats);
+        result.metadata ||= {};
+        result.metadata.nodeRuntimeVersion = (0, fs_1.readFileSync)(path_1.default.join(result.outputDir, exports.NODE_RUNTIME_VERSION_FILE)).toString();
+        return result;
+    }
+    getConfig(args) {
+        const webpackConfig = (0, common_1.getCommonWebpackConfig)(args);
+        const newEntries = {};
+        for (const [entryKey, entryPath] of Object.entries(webpackConfig.entry)) {
+            newEntries[`${NODE_WEBPACK_USER_CODE_DIR}/${entryKey}`] = entryPath;
+        }
+        webpackConfig.entry = newEntries;
+        webpackConfig.target = 'node18';
+        webpackConfig.output.filename = '[name].cjs';
+        webpackConfig.name = 'node-runtime';
+        webpackConfig.module.rules.push({
+            test: /\.m?js$/,
+            resolve: {
+                fullySpecified: false
+            }
+        });
+        webpackConfig.plugins.push({
+            apply: (compiler) => {
+                compiler.hooks.make.tapPromise('AfterEmitPlugin', this.insertWrapperBundle(args.entryPoints));
+            }
+        });
+        return webpackConfig;
+    }
+    insertWrapperBundle(entrypoints) {
+        return async (compilation) => {
+            const wrapper = await this.wrapperProvider.getNodeRuntimeWrapper();
+            const loader = await this.wrapperProvider.getNodeRuntimeLoader();
+            if (loader) {
+                const loaderSource = new RawSource(loader.script);
+                for (const entrypoint of entrypoints) {
+                    compilation.emitAsset(`${entrypoint.name}.cjs`, loaderSource);
+                }
+                const wrapperSource = new RawSource(wrapper.script);
+                compilation.emitAsset('__forge_wrapper__.cjs', wrapperSource);
+            }
+            else {
+                const source = new RawSource(wrapper.script);
+                for (const entrypoint of entrypoints) {
+                    compilation.emitAsset(`${entrypoint.name}.cjs`, source);
+                }
+            }
+            compilation.emitAsset(exports.NODE_RUNTIME_VERSION_FILE, new RawSource(JSON.stringify({
+                version: loader ? loader.version : wrapper.version
+            }, null, 2)));
+        };
+    }
+}
+exports.NodeBundler = NodeBundler;