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;