npm package diff
Package: @forge/bundler
Versions: 4.20.1-next.6 - 4.20.1-next.7
File: package/out/config/node.js
Index: package/out/config/node.js
===================================================================
--- package/out/config/node.js
+++ package/out/config/node.js
@@ -1,183 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.getNodeRuntimeBuildConfig = exports.getWrapperProvider = exports.NetworkWrapperProvider = exports.LocalWrapperProvider = exports.ParseWrapperCDNIndexError = exports.WrapperNetworkError = exports.LocalWrapperNotFoundError = exports.NODE_RUNTIME_VERSION_FILE = exports.NODE_WEBPACK_USER_CODE_DIR = exports.NODE_WEBPACK_CONFIG_NAME = void 0;
-const tslib_1 = require("tslib");
-const cheerio_1 = tslib_1.__importDefault(require("cheerio"));
-const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
-const cli_shared_1 = require("@forge/cli-shared");
-const common_1 = require("./common");
-const path_1 = tslib_1.__importDefault(require("path"));
-exports.NODE_WEBPACK_CONFIG_NAME = 'node-runtime';
-exports.NODE_WEBPACK_USER_CODE_DIR = 'bundled';
-exports.NODE_RUNTIME_VERSION_FILE = 'runtime.json';
-var RuntimeCDN;
-(function (RuntimeCDN) {
- RuntimeCDN["DEV"] = "https://forge-node-runtime.stg-east.frontend.public.atl-paas.net/";
- RuntimeCDN["STG"] = "https://forge-node-runtime.stg-east.frontend.public.atl-paas.net/";
- RuntimeCDN["PROD"] = "https://forge-node-runtime.prod-east.frontend.public.atl-paas.net/";
- RuntimeCDN["FEDRAMP_MODERATE_STAGING"] = "https://forge-node-runtime.prod-east.frontend.public.atl-paas.net/";
- RuntimeCDN["FEDRAMP_MODERATE_PROD"] = "https://forge-node-runtime.prod-east.frontend.public.atl-paas.net/";
-})(RuntimeCDN || (RuntimeCDN = {}));
-class LocalWrapperNotFoundError extends cli_shared_1.UserError {
- constructor() {
- super('Local node runtime wrapper not found.');
- }
-}
-exports.LocalWrapperNotFoundError = LocalWrapperNotFoundError;
-class WrapperNetworkError extends cli_shared_1.BaseError {
- constructor(message, requestId) {
- super(undefined, message);
- }
-}
-exports.WrapperNetworkError = WrapperNetworkError;
-class ParseWrapperCDNIndexError extends cli_shared_1.BaseError {
- constructor(message, requestId) {
- super(requestId, message);
- }
-}
-exports.ParseWrapperCDNIndexError = ParseWrapperCDNIndexError;
-var ScriptType;
-(function (ScriptType) {
- ScriptType["WRAPPER"] = "wrapper";
- ScriptType["LOADER"] = "loader";
-})(ScriptType || (ScriptType = {}));
-class LocalWrapperProvider {
- filesystemReader;
- runtimePath;
- constructor(filesystemReader, runtimePath) {
- this.filesystemReader = filesystemReader;
- this.runtimePath = runtimePath;
- }
- async getNodeRuntimeWrapper() {
- const wrapper = await this.filesystemReader.readFileAsync(path_1.default.join(this.runtimePath, 'dist/wrapper.js'));
- if (!wrapper) {
- throw new LocalWrapperNotFoundError();
- }
- return {
- script: wrapper,
- version: 'local-wrapper'
- };
- }
- async getNodeRuntimeLoader() {
- const loader = await this.filesystemReader.readFileAsync(path_1.default.join(this.runtimePath, 'dist/loader.js'));
- if (!loader) {
- throw new LocalWrapperNotFoundError();
- }
- return {
- script: loader,
- version: 'local-loader'
- };
- }
-}
-exports.LocalWrapperProvider = LocalWrapperProvider;
-class NetworkWrapperProvider {
- statsigService;
- wrapper;
- loader;
- cdnUrl;
- constructor(statsigService) {
- this.statsigService = statsigService;
- this.cdnUrl = (0, cli_shared_1.getEnvironmentConfig)(RuntimeCDN);
- }
- async getScriptPathFromIndex(htmlContent, requestId, scriptType) {
- const html = cheerio_1.default.load(htmlContent);
- const scriptPath = html('script')
- ?.get()
- ?.find((asset) => asset.attribs['src']?.includes(scriptType))?.attribs['src'];
- if (typeof scriptPath !== 'string') {
- throw new ParseWrapperCDNIndexError(`Unable to parse source of runtime ${scriptType}.`, requestId);
- }
- return new URL(scriptPath, this.cdnUrl).toString();
- }
- getFileFromCDN = async (scriptType) => {
- try {
- const indexResponse = await (0, node_fetch_1.default)(this.cdnUrl);
- if (!indexResponse.ok) {
- throw new WrapperNetworkError(`Failed to fetch runtime component: ${this.cdnUrl} ${indexResponse.status}.`, (0, cli_shared_1.getAtlassianTraceId)(indexResponse.headers));
- }
- const scriptUrl = await this.getScriptPathFromIndex(await indexResponse.text(), (0, cli_shared_1.getAtlassianTraceId)(indexResponse.headers), scriptType);
- const response = await (0, node_fetch_1.default)(scriptUrl);
- if (!response.ok) {
- throw new WrapperNetworkError(`Failed to fetch runtime component: ${scriptUrl.toString()} ${response.status}.`, (0, cli_shared_1.getAtlassianTraceId)(response.headers));
- }
- const script = await response.text();
- return {
- script,
- version: new URL(scriptUrl).pathname
- };
- }
- catch (e) {
- if (e instanceof ParseWrapperCDNIndexError) {
- throw e;
- }
- throw new WrapperNetworkError(e instanceof Error ? e.message : 'Networking error when retrieving runtime component, retry the command.');
- }
- };
- async getNodeRuntimeWrapper() {
- if (!this.wrapper) {
- this.wrapper = await this.getFileFromCDN(ScriptType.WRAPPER);
- }
- return this.wrapper;
- }
- async getNodeRuntimeLoader() {
- if (!this.loader) {
- if (await this.statsigService.testForgeCliBundleRuntimeLoaderGate()) {
- this.loader = await this.getFileFromCDN(ScriptType.LOADER);
- }
- }
- return this.loader;
- }
-}
-exports.NetworkWrapperProvider = NetworkWrapperProvider;
-const getWrapperProvider = ({ fileSystemReader, statsigService }) => {
- if (process.env.FORGE_RUNTIME_PATH) {
- return new LocalWrapperProvider(fileSystemReader, process.env.FORGE_RUNTIME_PATH);
- }
- return new NetworkWrapperProvider(statsigService);
-};
-exports.getWrapperProvider = getWrapperProvider;
-const getNodeRuntimeBuildConfig = (wrapperProvider) => (entrypoints, config) => {
- const webpackConfig = (0, common_1.getCommonWebpackConfig)(entrypoints, config);
- const newEntries = {};
- for (const [entryKey, entryPath] of Object.entries(webpackConfig.entry)) {
- newEntries[`${exports.NODE_WEBPACK_USER_CODE_DIR}/${entryKey}`] = entryPath;
- }
- webpackConfig.entry = newEntries;
- webpackConfig.target = 'node18';
- webpackConfig.output.filename = '[name].cjs';
- webpackConfig.name = exports.NODE_WEBPACK_CONFIG_NAME;
- webpackConfig.module.rules.push({
- test: /\.m?js$/,
- resolve: {
- fullySpecified: false
- }
- });
- webpackConfig.plugins.push({
- apply: (compiler) => {
- compiler.hooks.make.tapPromise('AfterEmitPlugin', async (compilation) => {
- const { RawSource } = compiler.webpack.sources;
- const wrapper = await wrapperProvider.getNodeRuntimeWrapper();
- const loader = await 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)));
- });
- }
- });
- return webpackConfig;
-};
-exports.getNodeRuntimeBuildConfig = getNodeRuntimeBuildConfig;