@forge/bundler 4.12.0-next.16 → 4.12.0-next.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @forge/bundler
2
2
 
3
+ ## 4.12.0-next.18
4
+
5
+ ### Patch Changes
6
+
7
+ - 902c23c0: Fetch wrapper directly from CDN instead of Launchdarkly
8
+
9
+ ## 4.12.0-next.17
10
+
11
+ ### Patch Changes
12
+
13
+ - e3260cf: Bumping dependencies via Renovate:
14
+
15
+ - @types/node
16
+
17
+ - Updated dependencies [e3260cf]
18
+ - @forge/api@2.19.0-next.5
19
+ - @forge/cli-shared@3.18.0-next.12
20
+ - @forge/node-runtime@0.1.2-next.7
21
+ - @forge/lint@3.6.6-next.12
22
+
3
23
  ## 4.12.0-next.16
4
24
 
5
25
  ### Patch Changes
@@ -1,15 +1,15 @@
1
1
  import { CommonWebpackConfig, ConfigBuilder, FunctionsEntryPoint } from './common';
2
- import { BaseError, FeatureFlagReader, FileSystemReader, UserError } from '@forge/cli-shared';
2
+ import { BaseError, FileSystemReader, UserError } from '@forge/cli-shared';
3
3
  export declare const NODE_WEBPACK_CONFIG_NAME = "node-runtime";
4
4
  export declare const NODE_WEBPACK_USER_CODE_DIR = "bundled";
5
5
  export declare class LocalWrapperNotFoundError extends UserError {
6
6
  constructor();
7
7
  }
8
8
  export declare class WrapperNetworkError extends BaseError {
9
- constructor(message: string);
9
+ constructor(message: string, requestId?: string);
10
10
  }
11
- export declare class WrapperNotAvailableError extends BaseError {
12
- constructor();
11
+ export declare class ParseWrapperCDNIndexError extends BaseError {
12
+ constructor(message: string, requestId: string | undefined);
13
13
  }
14
14
  export interface WrapperProvider {
15
15
  getNodeRuntimeWrapper(): Promise<string>;
@@ -20,13 +20,13 @@ export declare class LocalWrapperProvider implements WrapperProvider {
20
20
  getNodeRuntimeWrapper(): Promise<string>;
21
21
  }
22
22
  export declare class NetworkWrapperProvider implements WrapperProvider {
23
- private readonly wrapperUrl;
23
+ private readonly cdnUrl;
24
24
  private wrapper;
25
- constructor(wrapperUrl: string);
25
+ constructor(cdnUrl: string);
26
+ private getWrapperPathFromIndex;
26
27
  getNodeRuntimeWrapper(): Promise<string>;
27
28
  }
28
- export declare const getWrapperProvider: ({ featureFlags, fileSystemReader }: {
29
- featureFlags: FeatureFlagReader;
29
+ export declare const getWrapperProvider: ({ fileSystemReader }: {
30
30
  fileSystemReader: FileSystemReader;
31
31
  }) => Promise<LocalWrapperProvider | NetworkWrapperProvider>;
32
32
  export declare const getNodeRuntimeBuildConfig: (wrapperProvider: WrapperProvider) => (entrypoints: FunctionsEntryPoint[], config: ConfigBuilder) => CommonWebpackConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/config/node.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9F,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD,qBAAa,yBAA0B,SAAQ,SAAS;;CAIvD;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,wBAAyB,SAAQ,SAAS;;CAItD;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IACzD,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;CAO/C;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAEhD,OAAO,CAAC,QAAQ,CAAC,UAAU;IADvC,OAAO,CAAC,OAAO,CAAqB;gBACP,UAAU,EAAE,MAAM;IACzC,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;CAiB/C;AAED,eAAO,MAAM,kBAAkB;kBAIf,iBAAiB;sBACb,gBAAgB;4DAYnC,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBAClB,eAAe,mBACnB,mBAAmB,EAAE,UAAU,aAAa,KAAG,mBA6C5D,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/config/node.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAGhG,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAIpD,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,MAAM,WAAW,eAAe;IAC9B,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IACzD,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;CAO/C;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAEhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IADnC,OAAO,CAAC,OAAO,CAAqB;gBACP,MAAM,EAAE,MAAM;YAE7B,uBAAuB;IAS/B,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;CAmC/C;AAED,eAAO,MAAM,kBAAkB;sBAAoD,gBAAgB;4DAMlG,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBAClB,eAAe,mBACnB,mBAAmB,EAAE,UAAU,aAAa,KAAG,mBA6C5D,CAAC"}
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNodeRuntimeBuildConfig = exports.getWrapperProvider = exports.NetworkWrapperProvider = exports.LocalWrapperProvider = exports.WrapperNotAvailableError = exports.WrapperNetworkError = exports.LocalWrapperNotFoundError = exports.NODE_WEBPACK_USER_CODE_DIR = exports.NODE_WEBPACK_CONFIG_NAME = void 0;
3
+ exports.getNodeRuntimeBuildConfig = exports.getWrapperProvider = exports.NetworkWrapperProvider = exports.LocalWrapperProvider = exports.ParseWrapperCDNIndexError = exports.WrapperNetworkError = exports.LocalWrapperNotFoundError = exports.NODE_WEBPACK_USER_CODE_DIR = exports.NODE_WEBPACK_CONFIG_NAME = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_runtime_1 = require("@forge/node-runtime");
6
6
  const common_1 = require("./common");
7
7
  const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
8
8
  const cli_shared_1 = require("@forge/cli-shared");
9
+ const cheerio_1 = tslib_1.__importDefault(require("cheerio"));
9
10
  exports.NODE_WEBPACK_CONFIG_NAME = 'node-runtime';
10
11
  exports.NODE_WEBPACK_USER_CODE_DIR = 'bundled';
12
+ const FORGE_RUNTIME_CDN = 'https://forge-node-runtime.prod-east.frontend.public.atl-paas.net/';
11
13
  class LocalWrapperNotFoundError extends cli_shared_1.UserError {
12
14
  constructor() {
13
15
  super('Local node runtime wrapper not found.');
@@ -15,17 +17,17 @@ class LocalWrapperNotFoundError extends cli_shared_1.UserError {
15
17
  }
16
18
  exports.LocalWrapperNotFoundError = LocalWrapperNotFoundError;
17
19
  class WrapperNetworkError extends cli_shared_1.BaseError {
18
- constructor(message) {
20
+ constructor(message, requestId) {
19
21
  super(undefined, message);
20
22
  }
21
23
  }
22
24
  exports.WrapperNetworkError = WrapperNetworkError;
23
- class WrapperNotAvailableError extends cli_shared_1.BaseError {
24
- constructor() {
25
- super(undefined, 'Failed to load runtime component, check your network connection and retry.');
25
+ class ParseWrapperCDNIndexError extends cli_shared_1.BaseError {
26
+ constructor(message, requestId) {
27
+ super(requestId, message);
26
28
  }
27
29
  }
28
- exports.WrapperNotAvailableError = WrapperNotAvailableError;
30
+ exports.ParseWrapperCDNIndexError = ParseWrapperCDNIndexError;
29
31
  class LocalWrapperProvider {
30
32
  constructor(filesystemReader) {
31
33
  this.filesystemReader = filesystemReader;
@@ -40,36 +42,49 @@ class LocalWrapperProvider {
40
42
  }
41
43
  exports.LocalWrapperProvider = LocalWrapperProvider;
42
44
  class NetworkWrapperProvider {
43
- constructor(wrapperUrl) {
44
- this.wrapperUrl = wrapperUrl;
45
+ constructor(cdnUrl) {
46
+ this.cdnUrl = cdnUrl;
47
+ }
48
+ async getWrapperPathFromIndex(htmlContent, requestId) {
49
+ var _a, _b, _c;
50
+ const html = cheerio_1.default.load(htmlContent);
51
+ const wrapperPath = (_c = (_b = (_a = html('script')) === null || _a === void 0 ? void 0 : _a.get()) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.attribs['src'];
52
+ if (typeof wrapperPath !== 'string') {
53
+ throw new ParseWrapperCDNIndexError('Unable to parse source of runtime component.', requestId);
54
+ }
55
+ return new URL(wrapperPath, this.cdnUrl).toString();
45
56
  }
46
57
  async getNodeRuntimeWrapper() {
47
58
  if (this.wrapper) {
48
59
  return this.wrapper;
49
60
  }
50
61
  try {
51
- const response = await (0, node_fetch_1.default)(this.wrapperUrl);
62
+ const indexResponse = await (0, node_fetch_1.default)(this.cdnUrl);
63
+ if (!indexResponse.ok) {
64
+ throw new WrapperNetworkError(`Failed to fetch runtime component: ${this.cdnUrl} ${indexResponse.status}.`, (0, cli_shared_1.getAtlassianTraceId)(indexResponse.headers));
65
+ }
66
+ const wrapperUrl = await this.getWrapperPathFromIndex(await indexResponse.text(), (0, cli_shared_1.getAtlassianTraceId)(indexResponse.headers));
67
+ const response = await (0, node_fetch_1.default)(wrapperUrl);
52
68
  if (!response.ok) {
53
- throw new WrapperNetworkError(`Failed to fetch runtime component: ${this.wrapperUrl} ${response.status}.`);
69
+ throw new WrapperNetworkError(`Failed to fetch runtime component: ${wrapperUrl.toString()} ${response.status}.`, (0, cli_shared_1.getAtlassianTraceId)(response.headers));
54
70
  }
55
71
  this.wrapper = await response.text();
56
72
  return this.wrapper;
57
73
  }
58
74
  catch (e) {
75
+ if (e instanceof ParseWrapperCDNIndexError) {
76
+ throw e;
77
+ }
59
78
  throw new WrapperNetworkError(e instanceof Error ? e.message : 'Networking error when retrieving runtime component, retry the command.');
60
79
  }
61
80
  }
62
81
  }
63
82
  exports.NetworkWrapperProvider = NetworkWrapperProvider;
64
- const getWrapperProvider = async ({ featureFlags, fileSystemReader }) => {
83
+ const getWrapperProvider = async ({ fileSystemReader }) => {
65
84
  if (process.env.FORGE_USE_LOCAL_WRAPPER === 'true') {
66
85
  return new LocalWrapperProvider(fileSystemReader);
67
86
  }
68
- const wrapperUrl = await featureFlags.readFlag('forge-cli-node-runtime-wrapper-url');
69
- if (typeof wrapperUrl === 'string') {
70
- return new NetworkWrapperProvider(wrapperUrl);
71
- }
72
- throw new WrapperNotAvailableError();
87
+ return new NetworkWrapperProvider(FORGE_RUNTIME_CDN);
73
88
  };
74
89
  exports.getWrapperProvider = getWrapperProvider;
75
90
  const getNodeRuntimeBuildConfig = (wrapperProvider) => (entrypoints, config) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/bundler",
3
- "version": "4.12.0-next.16",
3
+ "version": "4.12.0-next.18",
4
4
  "description": "Default bundler for Forge apps",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Atlassian",
@@ -19,17 +19,18 @@
19
19
  "@babel/plugin-transform-optional-chaining": "^7.22.12",
20
20
  "@babel/plugin-transform-react-jsx": "^7.22.5",
21
21
  "@babel/preset-typescript": "^7.22.11",
22
- "@forge/api": "2.19.0-next.4",
22
+ "@forge/api": "2.19.0-next.5",
23
23
  "@forge/babel-plugin-transform-ui": "1.1.7-next.0",
24
- "@forge/cli-shared": "3.18.0-next.11",
25
- "@forge/lint": "3.6.6-next.11",
26
- "@forge/node-runtime": "0.1.2-next.6",
24
+ "@forge/cli-shared": "3.18.0-next.12",
25
+ "@forge/lint": "3.6.6-next.12",
26
+ "@forge/node-runtime": "0.1.2-next.7",
27
27
  "@forge/util": "1.3.1",
28
28
  "assert": "^2.0.0",
29
29
  "babel-loader": "^8.3.0",
30
30
  "browserify-zlib": "^0.2.0",
31
31
  "buffer": "^6.0.3",
32
32
  "chalk": "^2.4.2",
33
+ "cheerio": "^0.22.0",
33
34
  "console-browserify": "^1.2.0",
34
35
  "crypto-browserify": "^3.12.0",
35
36
  "events": "^3.3.0",
@@ -58,9 +59,9 @@
58
59
  },
59
60
  "devDependencies": {
60
61
  "@atlassian/xen-test-util": "^3.0.5",
61
- "@forge/runtime": "5.0.1-next.5",
62
+ "@forge/runtime": "5.0.1-next.6",
62
63
  "@types/jest": "^29.5.4",
63
- "@types/node": "14.18.57",
64
+ "@types/node": "14.18.58",
64
65
  "@types/react": "^17.0.65",
65
66
  "@types/readable-stream": "^2.3.15",
66
67
  "@types/webpack-bundle-analyzer": "^4.6.0",
@@ -75,4 +76,4 @@
75
76
  "engines": {
76
77
  "node": ">=12.13.1"
77
78
  }
78
- }
79
+ }