npm package diff

Package: @forge/bundler

Versions: 4.17.4-next.0-experimental-10722bc - 4.19.0-next.13

Modified:package/out/config/common.js

Index: package/out/config/common.js
===================================================================
--- package/out/config/common.js
+++ package/out/config/common.js
@@ -1,12 +1,13 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getCommonWebpackConfig = exports.getDevToolConfig = exports.resolveStubPath = exports.resolveModulePath = exports.getEntryPoints = void 0;
+exports.getCommonWebpackConfig = exports.geti18nRule = exports.getDevToolConfig = exports.resolveStubPath = exports.resolveModulePath = exports.getEntryPoints = void 0;
 const tslib_1 = require("tslib");
 const path_1 = require("path");
 const webpack_1 = tslib_1.__importDefault(require("webpack"));
 const text_1 = require("../text");
 const cli_shared_1 = require("@forge/cli-shared");
+const i18n_1 = require("@forge/i18n");
 const tsconfig_interactor_1 = require("../tsconfig-interactor");
 function getEntryPoints(handlers) {
     const entryPointMap = new Map();
     for (const { module, func } of handlers) {
@@ -37,8 +38,25 @@
     }
     return config.isDebugMode ? 'inline-source-map' : 'cheap-source-map';
 };
 exports.getDevToolConfig = getDevToolConfig;
+const geti18nRule = (i18nConfig) => {
+    const i18nResources = i18nConfig.resources || [];
+    const i18nResourcesMap = new Map(i18nResources.map(({ key, path }) => [(0, path_1.resolve)(path), key]));
+    const getFilename = ({ module: { resource: i18nResourcePath } }) => {
+        const i18nResourceKey = i18nResourcesMap.get(i18nResourcePath);
+        return (0, path_1.join)(i18n_1.I18N_BUNDLE_FOLDER_NAME, `${i18nResourceKey}.json`);
+    };
+    return {
+        test: /\.json$/i,
+        include: Array.from(i18nResourcesMap.keys()),
+        type: 'asset/resource',
+        generator: {
+            filename: getFilename
+        }
+    };
+};
+exports.geti18nRule = geti18nRule;
 const getCommonWebpackConfig = (entrypoints, config) => {
     if (!require.main) {
         throw new Error(text_1.Text.noExecutableFile);
     }

Modified:package/out/config/nativeui.js

Index: package/out/config/nativeui.js
===================================================================
--- package/out/config/nativeui.js
+++ package/out/config/nativeui.js
@@ -5,9 +5,10 @@
 const path_1 = require("path");
 const webpack_bundle_analyzer_1 = require("webpack-bundle-analyzer");
 const html_webpack_plugin_1 = tslib_1.__importDefault(require("html-webpack-plugin"));
 const tmp_1 = tslib_1.__importDefault(require("tmp"));
-const getNativeUiBuildConfig = (entrypoints) => {
+const common_1 = require("./common");
+const getNativeUiBuildConfig = (entrypoints, i18nConfig) => {
     const resolvedEntryPoints = {};
     for (const entrypoint of entrypoints) {
         resolvedEntryPoints[entrypoint.name] = (0, path_1.resolve)(entrypoint.path);
     }
@@ -43,8 +44,9 @@
         },
         target: 'web',
         module: {
             rules: [
+                ...(i18nConfig ? [(0, common_1.geti18nRule)(i18nConfig)] : []),
                 {
                     test: /\.(jpe?g|png|gif|svg)$/i,
                     type: 'asset/resource'
                 },

Modified:package/out/config/node.js

Index: package/out/config/node.js
===================================================================
--- package/out/config/node.js
+++ package/out/config/node.js
@@ -1,18 +1,23 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getNodeRuntimeBuildConfig = exports.getWrapperProvider = exports.NetworkWrapperProvider = exports.LocalWrapperProvider = exports.ParseWrapperCDNIndexError = exports.WrapperNetworkError = exports.LocalWrapperNotFoundError = exports.LOCAL_WRAPPER_PATH = exports.NODE_RUNTIME_VERSION_FILE = exports.NODE_WEBPACK_USER_CODE_DIR = exports.NODE_WEBPACK_CONFIG_NAME = void 0;
+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 path_1 = tslib_1.__importDefault(require("path"));
 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");
 exports.NODE_WEBPACK_CONFIG_NAME = 'node-runtime';
 exports.NODE_WEBPACK_USER_CODE_DIR = 'bundled';
 exports.NODE_RUNTIME_VERSION_FILE = 'runtime.json';
-const FORGE_RUNTIME_CDN = 'https://forge-node-runtime.prod-east.frontend.public.atl-paas.net/';
-exports.LOCAL_WRAPPER_PATH = path_1.default.resolve(__dirname, '..', '..', '..', 'forge-node-runtime', 'dist', 'wrapper.js');
+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.');
     }
@@ -32,9 +37,9 @@
 exports.ParseWrapperCDNIndexError = ParseWrapperCDNIndexError;
 class LocalWrapperProvider {
     filesystemReader;
     path;
-    constructor(filesystemReader, path = exports.LOCAL_WRAPPER_PATH) {
+    constructor(filesystemReader, path) {
         this.filesystemReader = filesystemReader;
         this.path = path;
     }
     async getNodeRuntimeWrapper() {
@@ -49,12 +54,12 @@
     }
 }
 exports.LocalWrapperProvider = LocalWrapperProvider;
 class NetworkWrapperProvider {
-    cdnUrl;
     wrapper;
-    constructor(cdnUrl) {
-        this.cdnUrl = cdnUrl;
+    cdnUrl;
+    constructor() {
+        this.cdnUrl = (0, cli_shared_1.getEnvironmentConfig)(RuntimeCDN);
     }
     async getWrapperPathFromIndex(htmlContent, requestId) {
         const html = cheerio_1.default.load(htmlContent);
         const wrapperPath = html('script')?.get()?.[0]?.attribs['src'];
@@ -93,15 +98,12 @@
     }
 }
 exports.NetworkWrapperProvider = NetworkWrapperProvider;
 const getWrapperProvider = ({ fileSystemReader }) => {
-    if (process.env.FORGE_USE_LOCAL_WRAPPER === 'true') {
-        return new LocalWrapperProvider(fileSystemReader);
-    }
     if (process.env.FORGE_WRAPPER_PATH) {
         return new LocalWrapperProvider(fileSystemReader, process.env.FORGE_WRAPPER_PATH);
     }
-    return new NetworkWrapperProvider(FORGE_RUNTIME_CDN);
+    return new NetworkWrapperProvider();
 };
 exports.getWrapperProvider = getWrapperProvider;
 const getNodeRuntimeBuildConfig = (wrapperProvider) => (entrypoints, config) => {
     const webpackConfig = (0, common_1.getCommonWebpackConfig)(entrypoints, config);

Modified:package/out/webpack.js

Index: package/out/webpack.js
===================================================================
--- package/out/webpack.js
+++ package/out/webpack.js
@@ -190,10 +190,10 @@
 const getSandboxBundler = () => createBundler(sandbox_1.getSandboxedRuntimeBuildConfig);
 exports.getSandboxBundler = getSandboxBundler;
 const getNodeBundler = (wrapperProvider) => createBundler((0, node_1.getNodeRuntimeBuildConfig)(wrapperProvider));
 exports.getNodeBundler = getNodeBundler;
-const nativeUiBundle = (logger, entrypoints) => {
-    const config = (0, nativeui_1.getNativeUiBuildConfig)(entrypoints);
+const nativeUiBundle = (logger, entrypoints, i18nConfig) => {
+    const config = (0, nativeui_1.getNativeUiBuildConfig)(entrypoints, i18nConfig);
     const compiler = (0, exports.getCompiler)(config, { writeToDisk: true });
     return new Promise((resolve, reject) => {
         compiler.run((compilerError, stats) => {
             try {

Modified:package/package.json

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/bundler",
-  "version": "4.17.4-next.0-experimental-10722bc",
+  "version": "4.19.0-next.13",
   "description": "Default bundler for Forge apps",
   "license": "UNLICENSED",
   "author": "Atlassian",
   "main": "out/index.js",
@@ -18,12 +18,14 @@
     "@babel/plugin-transform-numeric-separator": "^7.23.4",
     "@babel/plugin-transform-optional-chaining": "^7.23.4",
     "@babel/plugin-transform-react-jsx": "^7.23.4",
     "@babel/preset-typescript": "^7.23.3",
-    "@forge/api": "3.8.1-experimental-10722bc",
+    "@forge/api": "3.9.2-next.1",
     "@forge/babel-plugin-transform-ui": "1.1.18",
-    "@forge/cli-shared": "5.3.1-next.0-experimental-10722bc",
-    "@forge/lint": "5.2.4-next.0-experimental-10722bc",
+    "@forge/cli-shared": "5.5.0-next.12",
+    "@forge/i18n": "0.0.1-next.11",
+    "@forge/lint": "5.3.3-next.12",
+    "@forge/manifest": "7.7.0-next.12",
     "@forge/util": "1.4.4",
     "assert": "^2.1.0",
     "babel-loader": "^8.3.0",
     "browserify-zlib": "^0.2.0",
@@ -57,9 +59,9 @@
     "whatwg-url": "^12.0.1"
   },
   "devDependencies": {
     "@atlassian/xen-test-util": "^4.2.0",
-    "@forge/runtime": "5.9.0",
+    "@forge/runtime": "5.10.1",
     "@types/jest": "^29.5.12",
     "@types/node": "14.18.63",
     "@types/react": "^18.2.64",
     "@types/readable-stream": "^4.0.10",

Modified:package/out/config/common.d.ts.map

Index: package/out/config/common.d.ts.map
===================================================================
--- package/out/config/common.d.ts.map
+++ package/out/config/common.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/config/common.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,aAAa,IAAI,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjF,OAAO,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAG9D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,mBAAmB,GAAG,UAAU,GAAG;IAC7C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAiBzE;AAED,eAAO,MAAM,iBAAiB,eAAgB,MAAM,KAAG,MAEtD,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,eAAO,MAAM,gBAAgB,WAAY,aAAa,KAAG,MASxD,CAAC;AAEF,aAAK,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,aAAK,mBAAmB,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAClE,oBAAY,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,oBAAY,mBAAmB,GAAG,cAAc,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,GAC9F,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,GACrC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAElC,eAAO,MAAM,sBAAsB,gBAAiB,UAAU,EAAE,UAAU,aAAa,KAAG,mBAyGzF,CAAC"}
\ No newline at end of file
+{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/config/common.ts"],"names":[],"mappings":";AACA,OAAgB,EAAE,aAAa,IAAI,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjF,OAAO,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,mBAAmB,GAAG,UAAU,GAAG;IAC7C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAiBzE;AAED,eAAO,MAAM,iBAAiB,eAAgB,MAAM,KAAG,MAEtD,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,eAAO,MAAM,gBAAgB,WAAY,aAAa,KAAG,MASxD,CAAC;AAEF,aAAK,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,aAAK,mBAAmB,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAClE,oBAAY,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,oBAAY,mBAAmB,GAAG,cAAc,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,GAC9F,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,GACrC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAElC,eAAO,MAAM,WAAW,eAAgB,YAAY;;;;;+DAIe;YAAE,QAAQ;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE;;CAalG,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBAAiB,UAAU,EAAE,UAAU,aAAa,KAAG,mBAwGzF,CAAC"}
\ No newline at end of file

Modified:package/out/config/nativeui.d.ts.map

Index: package/out/config/nativeui.d.ts.map
===================================================================
--- package/out/config/nativeui.d.ts.map
+++ package/out/config/nativeui.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"nativeui.d.ts","sourceRoot":"","sources":["../../src/config/nativeui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtC,eAAO,MAAM,sBAAsB,gBAAiB,UAAU,EAAE,KAAG,aAwElE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"nativeui.d.ts","sourceRoot":"","sources":["../../src/config/nativeui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAEnD,eAAO,MAAM,sBAAsB,gBAAiB,UAAU,EAAE,eAAe,YAAY,KAAG,aAyE7F,CAAC"}
\ No newline at end of file

Modified:package/out/config/node.d.ts.map

Index: package/out/config/node.d.ts.map
===================================================================
--- package/out/config/node.d.ts.map
+++ package/out/config/node.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/config/node.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAIxD,eAAO,MAAM,kBAAkB,QAAwF,CAAC;AAExH,qBAAa,yBAA0B,SAAQ,SAAS;;CAIvD;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;CAG3D;AAED,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACjD;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAExD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,GAAE,MAA2B;IAE9C,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;CAUtD;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAEhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IADnC,OAAO,CAAC,OAAO,CAA4B;gBACd,MAAM,EAAE,MAAM;YAE7B,uBAAuB;IAS/B,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;CAuCtD;AAED,eAAO,MAAM,kBAAkB;sBAA8C,gBAAgB;mDAW5F,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBAClB,eAAe,mBACnB,mBAAmB,EAAE,UAAU,aAAa,KAAG,mBA4D5D,CAAC"}
\ No newline at end of file
+{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/config/node.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAA6C,MAAM,mBAAmB,CAAC;AAEtH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAWxD,qBAAa,yBAA0B,SAAQ,SAAS;;CAIvD;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;CAG3D;AAED,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACjD;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAExD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM;IAEzB,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;CAUtD;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,OAAO,CAA4B;IAC3C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;;YAKX,uBAAuB;IAS/B,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;CAuCtD;AAED,eAAO,MAAM,kBAAkB;sBAA8C,gBAAgB;mDAQ5F,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBAClB,eAAe,mBACnB,mBAAmB,EAAE,UAAU,aAAa,KAAG,mBA4D5D,CAAC"}
\ No newline at end of file

Modified:package/out/types.d.ts.map

Index: package/out/types.d.ts.map
===================================================================
--- package/out/types.d.ts.map
+++ package/out/types.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,oBAAY,YAAY,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,oBAAY,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAEzD,oBAAY,OAAO,CAAC,EAAE,GAAG,UAAU,IAAI,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,EAAE,EAAE,KACf,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5B,oBAAY,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhH,oBAAY,eAAe,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AAClF,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,oBAAY,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAEpE,oBAAY,OAAO,GAAG,CACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,UAAU,EAAE,EAC1B,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,QAAQ,KAChB,cAAc,CAAC"}
\ No newline at end of file
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,oBAAY,YAAY,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,oBAAY,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAEzD,oBAAY,OAAO,CAAC,EAAE,GAAG,UAAU,IAAI,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,EAAE,EAAE,EAClB,UAAU,CAAC,EAAE,YAAY,KACtB,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5B,oBAAY,aAAa,GAAG,CAC1B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,CAAC,EAAE,YAAY,KACtB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpC,oBAAY,eAAe,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;AAClF,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,oBAAY,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAEpE,oBAAY,OAAO,GAAG,CACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,UAAU,EAAE,EAC1B,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,QAAQ,KAChB,cAAc,CAAC"}
\ No newline at end of file

Modified:package/out/webpack.d.ts.map

Index: package/out/webpack.d.ts.map
===================================================================
--- package/out/webpack.d.ts.map
+++ package/out/webpack.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../src/webpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,GAAG,EAAU,MAAM,OAAO,CAAC;AACxD,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAgB,OAAO,EAAkB,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAEL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA2B,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtG,OAAO,EAKL,eAAe,EAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,CAAC;AAQtB,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,EAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,GAC/B,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAkChC;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,aAAa,CA6B9F;AAED,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,WAAW,kBAAmB,aAAa,YAAY,eAAe,KAAG,QAOrF,CAAC;AA6BF,eAAO,MAAM,SAAS,YAEZ,UAAU,+EAGjB,QAAQ,IAAI,CA+Bd,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,OAwBnB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU,EAC9D,cAAc,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,KAAK,mBAAmB,GACvF,OAAO,CAAC,EAAE,CAAC,CA+Bb;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,OAA6D,CAAC;AACpG,eAAO,MAAM,cAAc,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,mBAAmB,CACnC,CAAC;AAE5D,eAAO,MAAM,cAAc,EAAE,aAkB5B,CAAC"}
\ No newline at end of file
+{"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../src/webpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,GAAG,EAAU,MAAM,OAAO,CAAC;AACxD,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAgB,OAAO,EAAkB,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAEL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAA2B,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtG,OAAO,EAKL,eAAe,EAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,CAAC;AAQtB,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,EAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,GAC/B,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAkChC;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,aAAa,CA6B9F;AAED,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,WAAW,kBAAmB,aAAa,YAAY,eAAe,KAAG,QAOrF,CAAC;AA6BF,eAAO,MAAM,SAAS,YAEZ,UAAU,+EAGjB,QAAQ,IAAI,CA+Bd,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,OAwBnB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,SAAS,UAAU,GAAG,UAAU,EAC9D,cAAc,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,KAAK,mBAAmB,GACvF,OAAO,CAAC,EAAE,CAAC,CA+Bb;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,OAA6D,CAAC;AACpG,eAAO,MAAM,cAAc,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,mBAAmB,CACnC,CAAC;AAE5D,eAAO,MAAM,cAAc,EAAE,aAsB5B,CAAC"}
\ No newline at end of file

Modified:package/CHANGELOG.md

too-big

Modified:package/out/config/common.d.ts

Index: package/out/config/common.d.ts
===================================================================
--- package/out/config/common.d.ts
+++ package/out/config/common.d.ts
@@ -1,6 +1,8 @@
+/// <reference types="node" />
 import { Configuration as WebpackConfig, ModuleOptions } from 'webpack';
 import { Handler } from '@forge/cli-shared';
+import { Translations } from '@forge/manifest';
 export interface ConfigBuilder {
     isWatchMode: boolean;
     isDebugMode?: boolean;
     appDirectory: string;
@@ -19,7 +21,19 @@
 declare type RequiredFields<T, F extends keyof T> = T & Required<Pick<T, F>>;
 declare type CommonModuleOptions = RequiredFields<ModuleOptions, 'rules'>;
 export declare type WebpackEntries = Record<string, string>;
 export declare type CommonWebpackConfig = RequiredFields<WebpackConfig, 'module' | 'plugins' | 'output'> & Record<'module', CommonModuleOptions> & Record<'entry', WebpackEntries>;
+export declare const geti18nRule: (i18nConfig: Translations) => {
+    test: RegExp;
+    include: string[];
+    type: string;
+    generator: {
+        filename: ({ module: { resource: i18nResourcePath } }: {
+            module: {
+                resource: string;
+            };
+        }) => string;
+    };
+};
 export declare const getCommonWebpackConfig: (entrypoints: EntryPoint[], config: ConfigBuilder) => CommonWebpackConfig;
 export {};
 //# sourceMappingURL=common.d.ts.map
\ No newline at end of file

Modified:package/out/config/nativeui.d.ts

Index: package/out/config/nativeui.d.ts
===================================================================
--- package/out/config/nativeui.d.ts
+++ package/out/config/nativeui.d.ts
@@ -1,4 +1,5 @@
 import { Configuration as WebpackConfig } from 'webpack';
+import { Translations } from '@forge/manifest';
 import { EntryPoint } from './common';
-export declare const getNativeUiBuildConfig: (entrypoints: EntryPoint[]) => WebpackConfig;
+export declare const getNativeUiBuildConfig: (entrypoints: EntryPoint[], i18nConfig?: Translations) => WebpackConfig;
 //# sourceMappingURL=nativeui.d.ts.map
\ No newline at end of file

Modified:package/out/config/node.d.ts

Index: package/out/config/node.d.ts
===================================================================
--- package/out/config/node.d.ts
+++ package/out/config/node.d.ts
@@ -2,9 +2,8 @@
 import { CommonWebpackConfig, ConfigBuilder, FunctionsEntryPoint } from './common';
 export declare const NODE_WEBPACK_CONFIG_NAME = "node-runtime";
 export declare const NODE_WEBPACK_USER_CODE_DIR = "bundled";
 export declare const NODE_RUNTIME_VERSION_FILE = "runtime.json";
-export declare const LOCAL_WRAPPER_PATH: string;
 export declare class LocalWrapperNotFoundError extends UserError {
     constructor();
 }
 export declare class WrapperNetworkError extends BaseError {
@@ -22,15 +21,15 @@
 }
 export declare class LocalWrapperProvider implements WrapperProvider {
     private readonly filesystemReader;
     private readonly path;
-    constructor(filesystemReader: FileSystemReader, path?: string);
+    constructor(filesystemReader: FileSystemReader, path: string);
     getNodeRuntimeWrapper(): Promise<WrapperScript>;
 }
 export declare class NetworkWrapperProvider implements WrapperProvider {
-    private readonly cdnUrl;
     private wrapper;
-    constructor(cdnUrl: string);
+    protected cdnUrl: string;
+    constructor();
     private getWrapperPathFromIndex;
     getNodeRuntimeWrapper(): Promise<WrapperScript>;
 }
 export declare const getWrapperProvider: ({ fileSystemReader }: {

Modified:package/out/types.d.ts

Index: package/out/types.d.ts
===================================================================
--- package/out/types.d.ts
+++ package/out/types.d.ts
@@ -1,5 +1,6 @@
 import { Logger } from '@forge/cli-shared';
+import { Translations } from '@forge/manifest';
 import { Compiler } from 'webpack';
 import { EntryPoint } from './webpack';
 export declare type BundledFiles = {
     [filename: string]: string;
@@ -11,10 +12,10 @@
         [key: string]: any;
     };
 }
 export declare type BundleLogger = Pick<Logger, 'info' | 'warn'>;
-export declare type Bundler<EP = EntryPoint> = (logger: BundleLogger, appDirectory: string, endpointPath: EP[]) => Promise<BundlerOutput>;
-export declare type InDiskBundler = (logger: BundleLogger, entrypoints: EntryPoint[]) => Promise<{
+export declare type Bundler<EP = EntryPoint> = (logger: BundleLogger, appDirectory: string, endpointPath: EP[], i18nConfig?: Translations) => Promise<BundlerOutput>;
+export declare type InDiskBundler = (logger: BundleLogger, entrypoints: EntryPoint[], i18nConfig?: Translations) => Promise<{
     outputDir: string;
 }>;
 export declare type WatcherCallback = (err: Error | null, output?: BundlerOutput) => void;
 export interface WatcherMonitor {