@commercetools-frontend/application-cli 1.8.0 → 2.0.0

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.
@@ -1,6 +1,7 @@
1
1
  import { cac } from 'cac';
2
2
  import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
3
3
  import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
4
+ import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
4
5
  import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
5
6
  import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
6
7
  import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
@@ -8,23 +9,29 @@ import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/obje
8
9
  import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
9
10
  import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
10
11
  import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
11
- import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
12
12
  import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
13
13
  import _Object$entries from '@babel/runtime-corejs3/core-js-stable/object/entries';
14
- import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
14
+ import _Set from '@babel/runtime-corejs3/core-js-stable/set';
15
+ import _flatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/flat';
15
16
  import fs from 'fs';
16
17
  import path from 'path';
17
18
  import { Listr } from 'listr2';
18
19
  import execa from 'execa';
19
20
  import { cosmiconfig } from 'cosmiconfig';
20
21
  import { findRootSync } from '@manypkg/find-root';
22
+ import _possibleConstructorReturn from '@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn';
23
+ import _get from '@babel/runtime-corejs3/helpers/esm/get';
24
+ import _getPrototypeOf from '@babel/runtime-corejs3/helpers/esm/getPrototypeOf';
25
+ import _inherits from '@babel/runtime-corejs3/helpers/esm/inherits';
26
+ import _classCallCheck from '@babel/runtime-corejs3/helpers/esm/classCallCheck';
27
+ import _createClass from '@babel/runtime-corejs3/helpers/esm/createClass';
28
+ import _Reflect$construct from '@babel/runtime-corejs3/core-js-stable/reflect/construct';
21
29
  import dotenv from 'dotenv';
22
30
  import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
23
31
  import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
24
32
  import { processConfig } from '@commercetools-frontend/application-config';
25
33
  import { getSupportedLocales } from '@commercetools-frontend/l10n';
26
34
  import _sliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/slice';
27
- import fetch from 'node-fetch';
28
35
  import { Validator } from 'jsonschema';
29
36
 
30
37
  function getApplicationDirectory(cwd) {
@@ -40,19 +47,167 @@ function isCI() {
40
47
  return process.env.CI === true || process.env.CI === 'true';
41
48
  }
42
49
 
43
- function createApplicationIndexUploadScript(_ref) {
44
- let packageManagerName = _ref.packageManagerName,
45
- bucketUrl = _ref.bucketUrl,
46
- cdnUrl = _ref.cdnUrl,
47
- bucketEnvironment = _ref.bucketEnvironment,
48
- buildRevision = _ref.buildRevision,
49
- buildNumber = _ref.buildNumber,
50
- applicationIndexOutFile = _ref.applicationIndexOutFile;
51
- const uploadScriptContent = `#!/usr/bin/env bash
50
+ function ownKeys$4(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
51
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var _context3, _context4; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context3 = ownKeys$4(Object(t), !0)).call(_context3, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context4 = ownKeys$4(Object(t))).call(_context4, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
52
+ function _callSuper(_this, derived, args) {
53
+ function isNativeReflectConstruct() {
54
+ if (typeof Reflect === "undefined" || !_Reflect$construct) return false;
55
+ if (_Reflect$construct.sham) return false;
56
+ if (typeof Proxy === "function") return true;
57
+ try {
58
+ return !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
59
+ } catch (e) {
60
+ return false;
61
+ }
62
+ }
63
+ derived = _getPrototypeOf(derived);
64
+ return _possibleConstructorReturn(_this, isNativeReflectConstruct() ? _Reflect$construct(derived, args || [], _getPrototypeOf(_this).constructor) : derived.apply(_this, args));
65
+ }
66
+ let StorageProvider = /*#__PURE__*/function () {
67
+ function StorageProvider() {
68
+ _classCallCheck(this, StorageProvider);
69
+ }
70
+ _createClass(StorageProvider, [{
71
+ key: "getBucketNamespace",
72
+ value:
73
+ /**
74
+ * Construct the storage bucket URL for the specific application and cloud environment.
75
+ *
76
+ * 1. Static assets are uploaded to `:bucketRegion/:prNumber?/:applicationName`
77
+ * 2. The application index is uploaded to `:bucketRegion/:prNumber?/:applicationName/:cloudEnvironment`
78
+ *
79
+ * This allows all cloud environments sharing the same static assets while each application's index
80
+ * is uploaded with different headers (e.g. CSP rules).
81
+ */
82
+ function getBucketNamespace(prNumber) {
83
+ if (!prNumber) return;
84
+ if (prNumber === 'merchant-center-preview') return prNumber;
85
+ return `mc-${prNumber}`;
86
+ }
87
+
88
+ /**
89
+ * Construct the storage bucket URL for the specific application and cloud environment.
90
+ */
91
+ }, {
92
+ key: "getAssetsBucketUrl",
93
+ value: function getAssetsBucketUrl(_ref) {
94
+ var _context;
95
+ let bucketProtocol = _ref.bucketProtocol,
96
+ bucketRegion = _ref.bucketRegion,
97
+ bucketNamespace = _ref.bucketNamespace,
98
+ applicationName = _ref.applicationName;
99
+ const assetsBucketUrl = _filterInstanceProperty(_context = [bucketRegion, bucketNamespace, applicationName]).call(_context, Boolean).join('/');
100
+ return `${bucketProtocol}${assetsBucketUrl}`;
101
+ }
102
+ }, {
103
+ key: "getApplicationIndexBucketUrl",
104
+ value: function getApplicationIndexBucketUrl(_ref2) {
105
+ let bucketProtocol = _ref2.bucketProtocol,
106
+ bucketRegion = _ref2.bucketRegion,
107
+ bucketNamespace = _ref2.bucketNamespace,
108
+ prNumber = _ref2.prNumber,
109
+ applicationName = _ref2.applicationName,
110
+ bucketEnvironment = _ref2.bucketEnvironment;
111
+ const applicationAssetsBucketUrl = this.getAssetsBucketUrl({
112
+ bucketProtocol,
113
+ bucketRegion,
114
+ bucketNamespace,
115
+ prNumber,
116
+ applicationName
117
+ });
118
+ const applicationIndexBucketUrl = `${applicationAssetsBucketUrl}/${bucketEnvironment}`;
119
+ return applicationIndexBucketUrl;
120
+ }
121
+ }, {
122
+ key: "getCdnUrl",
123
+ value: function getCdnUrl(_ref3) {
124
+ var _context2;
125
+ let publicBaseUrl = _ref3.publicBaseUrl,
126
+ bucketRegion = _ref3.bucketRegion,
127
+ prNumber = _ref3.prNumber,
128
+ applicationName = _ref3.applicationName;
129
+ return _filterInstanceProperty(_context2 = [publicBaseUrl, bucketRegion, this.getBucketNamespace(prNumber), applicationName]).call(_context2, Boolean).join('/');
130
+ }
131
+ }]);
132
+ return StorageProvider;
133
+ }();
134
+ let GoogleStorageProvider = /*#__PURE__*/function (_StorageProvider) {
135
+ _inherits(GoogleStorageProvider, _StorageProvider);
136
+ function GoogleStorageProvider() {
137
+ _classCallCheck(this, GoogleStorageProvider);
138
+ return _callSuper(this, GoogleStorageProvider, arguments);
139
+ }
140
+ _createClass(GoogleStorageProvider, [{
141
+ key: "getTag",
142
+ value: function getTag() {
143
+ return 'gs';
144
+ }
145
+ }, {
146
+ key: "getProtocol",
147
+ value: function getProtocol() {
148
+ return 'gs://';
149
+ }
150
+ }, {
151
+ key: "getPublicBaseUrl",
152
+ value: function getPublicBaseUrl() {
153
+ return 'https://storage.googleapis.com';
154
+ }
155
+ }, {
156
+ key: "getCdnUrl",
157
+ value: function getCdnUrl(config) {
158
+ return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getCdnUrl", this).call(this, _objectSpread$4({
159
+ publicBaseUrl: this.getPublicBaseUrl()
160
+ }, config));
161
+ }
162
+ }, {
163
+ key: "getAssetsBucketUrl",
164
+ value: function getAssetsBucketUrl(config) {
165
+ return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getAssetsBucketUrl", this).call(this, _objectSpread$4({
166
+ bucketProtocol: this.getProtocol(),
167
+ bucketNamespace: _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getBucketNamespace", this).call(this, config.prNumber)
168
+ }, config));
169
+ }
170
+ }, {
171
+ key: "getApplicationIndexBucketUrl",
172
+ value: function getApplicationIndexBucketUrl(config) {
173
+ return _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getApplicationIndexBucketUrl", this).call(this, _objectSpread$4({
174
+ bucketProtocol: this.getProtocol(),
175
+ bucketNamespace: _get(_getPrototypeOf(GoogleStorageProvider.prototype), "getBucketNamespace", this).call(this, config.prNumber)
176
+ }, config));
177
+ }
178
+ }]);
179
+ return GoogleStorageProvider;
180
+ }(StorageProvider); // TODO: to be implemented.
181
+ function getStorageProvider(storageProvider) {
182
+ switch (storageProvider) {
183
+ case 'gs':
184
+ return new GoogleStorageProvider();
185
+ default:
186
+ throw new Error(`Storage provider ${storageProvider} not supported`);
187
+ }
188
+ }
189
+
190
+ let GoogleStorageUploadScriptsGenerator = /*#__PURE__*/function () {
191
+ function GoogleStorageUploadScriptsGenerator() {
192
+ _classCallCheck(this, GoogleStorageUploadScriptsGenerator);
193
+ }
194
+ _createClass(GoogleStorageUploadScriptsGenerator, [{
195
+ key: "getApplicationIndexUploadScript",
196
+ value: function getApplicationIndexUploadScript(_ref) {
197
+ let packageManagerName = _ref.packageManagerName,
198
+ bucketUrl = _ref.bucketUrl,
199
+ cdnUrl = _ref.cdnUrl,
200
+ bucketEnvironment = _ref.bucketEnvironment,
201
+ buildRevision = _ref.buildRevision,
202
+ buildNumber = _ref.buildNumber,
203
+ applicationIndexOutFile = _ref.applicationIndexOutFile;
204
+ return `
205
+ #!/usr/bin/env bash
52
206
 
53
207
  set -e
54
208
 
55
- echo "Uploading compiled ${applicationIndexOutFile} to bucket ${bucketUrl}"
209
+ echo "Uploading compiled ${applicationIndexOutFile} to Google Storage bucket ${bucketUrl}"
210
+
56
211
  gcloud storage cp \\
57
212
  "$(dirname "$0")/${applicationIndexOutFile}" \\
58
213
  "${bucketUrl}/" \\
@@ -75,14 +230,15 @@ gcloud storage cp \\
75
230
  --content-type="application/json" \\
76
231
  --cache-control="public,max-age=0,no-transform"
77
232
  `;
78
- return uploadScriptContent;
79
- }
80
-
81
- function createApplicationAssetsUploadScript(_ref) {
82
- let bucketUrl = _ref.bucketUrl,
83
- assetsPath = _ref.assetsPath,
84
- skipMenu = _ref.skipMenu;
85
- const uploadScriptContent = `#!/usr/bin/env bash
233
+ }
234
+ }, {
235
+ key: "getProductionBundlesUploadScript",
236
+ value: function getProductionBundlesUploadScript(_ref2) {
237
+ let bucketUrl = _ref2.bucketUrl,
238
+ assetsPath = _ref2.assetsPath,
239
+ skipMenu = _ref2.skipMenu;
240
+ return `
241
+ #!/usr/bin/env bash
86
242
 
87
243
  set -e
88
244
 
@@ -95,7 +251,7 @@ set -e
95
251
  # "valid" lifetime of an asset to be cached.
96
252
  # 4. The '-n' will skip uploading existing files and prevents them to
97
253
  # be overwritten
98
- echo "Uploading static assets to bucket ${bucketUrl}"
254
+ echo "Uploading static assets to Google Storage bucket ${bucketUrl}"
99
255
 
100
256
  gcloud storage cp \\
101
257
  ${assetsPath}/public/{*.css,*.js,*.js.map,*.png,*.html,robots.txt} \\
@@ -134,7 +290,17 @@ else
134
290
  --cache-control="public,max-age=0,no-transform"
135
291
  fi
136
292
  `;
137
- return uploadScriptContent;
293
+ }
294
+ }]);
295
+ return GoogleStorageUploadScriptsGenerator;
296
+ }(); // TODO: To be implemented.
297
+ function getUploadScriptsGenerator(storageProvider) {
298
+ switch (storageProvider) {
299
+ case 'gs':
300
+ return new GoogleStorageUploadScriptsGenerator();
301
+ default:
302
+ throw new Error(`Storage provider ${storageProvider} not supported`);
303
+ }
138
304
  }
139
305
 
140
306
  function ownKeys$3(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -175,14 +341,10 @@ function loadDotenvFiles(_ref) {
175
341
  }
176
342
 
177
343
  function ownKeys$2(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
178
- function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys$2(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys$2(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
179
- const buckedConfigExplorer = cosmiconfig('google-storage-buckets');
180
- function assertCollapsedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment) {
181
- return typeof bucketEnvironmentConfigOrBucketEnvironment == 'string';
182
- }
183
- function assertExpandedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment) {
184
- return typeof bucketEnvironmentConfigOrBucketEnvironment == 'object' && typeof bucketEnvironmentConfigOrBucketEnvironment.cloudEnvironment == 'string' && typeof bucketEnvironmentConfigOrBucketEnvironment.bucketEnvironment == 'string';
185
- }
344
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var _context4, _context5; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context4 = ownKeys$2(Object(t), !0)).call(_context4, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context5 = ownKeys$2(Object(t))).call(_context5, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
345
+ const buckedConfigExplorer = cosmiconfig('storage-buckets', {
346
+ searchStrategy: 'project'
347
+ });
186
348
  function writeUploadScriptFile(_ref) {
187
349
  let fileName = _ref.fileName,
188
350
  fileContent = _ref.fileContent,
@@ -193,56 +355,15 @@ function writeUploadScriptFile(_ref) {
193
355
  encoding: 'utf8'
194
356
  });
195
357
  }
196
- function getBucketNamespace(prNumber) {
197
- if (!prNumber) return;
198
- if (prNumber === 'merchant-center-preview') return prNumber;
199
- return `mc-${prNumber}`;
200
- }
201
-
202
- /**
203
- * Construct the storage bucket URL for the specific application and cloud environment.
204
- *
205
- * 1. Static assets are uploaded to `:bucketRegion/:prNumber?/:applicationName`
206
- * 2. The application index is uploaded to `:bucketRegion/:prNumber?/:applicationName/:cloudEnvironment`
207
- *
208
- * This allows all cloud environments sharing the same static assets while each application's index
209
- * is uploaded with different headers (e.g. CSP rules).
210
- */
211
-
212
- function getApplicationAssetsBucketUrl(_ref2) {
213
- var _context;
214
- let bucketRegion = _ref2.bucketRegion,
215
- prNumber = _ref2.prNumber,
216
- applicationName = _ref2.applicationName;
217
- const applicationAssetsBucketUrl = _filterInstanceProperty(_context = [`gs://${bucketRegion}`, getBucketNamespace(prNumber), applicationName]).call(_context, Boolean);
218
- return applicationAssetsBucketUrl.join('/');
219
- }
220
- function getApplicationIndexBucketUrl(_ref3) {
221
- let bucketRegion = _ref3.bucketRegion,
222
- prNumber = _ref3.prNumber,
223
- applicationName = _ref3.applicationName,
224
- bucketEnvironment = _ref3.bucketEnvironment;
225
- const applicationAssetsBucketUrl = getApplicationAssetsBucketUrl({
226
- bucketRegion,
227
- prNumber,
228
- applicationName
229
- });
230
- const applicationIndexBucketUrl = `${applicationAssetsBucketUrl}/${bucketEnvironment}`;
231
- return applicationIndexBucketUrl;
232
- }
233
- function getCdnUrl(_ref4) {
234
- var _context2;
235
- let bucketRegion = _ref4.bucketRegion,
236
- prNumber = _ref4.prNumber,
237
- applicationName = _ref4.applicationName;
238
- return _filterInstanceProperty(_context2 = [`https://storage.googleapis.com/${bucketRegion}`, getBucketNamespace(prNumber), applicationName]).call(_context2, Boolean).join('/');
239
- }
240
- async function compileApplicationAssets(_ref5) {
241
- let cliFlags = _ref5.cliFlags,
242
- bucketRegion = _ref5.bucketRegion,
243
- paths = _ref5.paths;
244
- const applicationAssetsUploadScriptContent = createApplicationAssetsUploadScript({
245
- bucketUrl: getApplicationAssetsBucketUrl({
358
+ async function compileApplicationAssets(_ref2) {
359
+ let cliFlags = _ref2.cliFlags,
360
+ storageProvider = _ref2.storageProvider,
361
+ uploadScriptsGenerator = _ref2.uploadScriptsGenerator,
362
+ bucketRegion = _ref2.bucketRegion,
363
+ paths = _ref2.paths;
364
+ const applicationAssetsUploadScriptContent = uploadScriptsGenerator.getProductionBundlesUploadScript({
365
+ storageProvider,
366
+ bucketUrl: storageProvider.getAssetsBucketUrl({
246
367
  bucketRegion,
247
368
  prNumber: cliFlags.prNumber,
248
369
  applicationName: cliFlags.applicationName
@@ -255,16 +376,18 @@ async function compileApplicationAssets(_ref5) {
255
376
  writeUploadScriptFile({
256
377
  fileName: applicationAssetsUploadScriptFileName,
257
378
  fileContent: applicationAssetsUploadScriptContent,
258
- filePath: paths.deploymentsPath
379
+ filePath: path.join(paths.deploymentsPath, storageProvider.getTag())
259
380
  });
260
381
  }
261
- async function compileEnvironmentApplicationIndexes(_ref6) {
262
- let cliFlags = _ref6.cliFlags,
263
- paths = _ref6.paths,
264
- bucketRegion = _ref6.bucketRegion,
265
- cloudEnvironment = _ref6.cloudEnvironment,
266
- bucketEnvironment = _ref6.bucketEnvironment;
267
- const cloudEnvironmentDeploymentPath = path.join(paths.deploymentsPath, cloudEnvironment);
382
+ async function compileEnvironmentApplicationIndexes(_ref3) {
383
+ let cliFlags = _ref3.cliFlags,
384
+ storageProvider = _ref3.storageProvider,
385
+ uploadScriptsGenerator = _ref3.uploadScriptsGenerator,
386
+ paths = _ref3.paths,
387
+ bucketRegion = _ref3.bucketRegion,
388
+ cloudEnvironment = _ref3.cloudEnvironment,
389
+ bucketEnvironment = _ref3.bucketEnvironment;
390
+ const cloudEnvironmentDeploymentPath = path.join(paths.deploymentsPath, storageProvider.getTag(), cloudEnvironment);
268
391
  // Ensure the folder exists
269
392
  const createDeploymentsFolderResult = await execa('mkdir', ['-p', cloudEnvironmentDeploymentPath], {
270
393
  encoding: 'utf8'
@@ -274,7 +397,7 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
274
397
  }
275
398
 
276
399
  // Construct the proper CDN URL for the specific application
277
- const cdnUrl = getCdnUrl({
400
+ const cdnUrl = storageProvider.getCdnUrl({
278
401
  bucketRegion,
279
402
  prNumber: cliFlags.prNumber,
280
403
  applicationName: cliFlags.applicationName
@@ -317,9 +440,10 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
317
440
  if (compileResult.failed) {
318
441
  throw new Error(compileResult.stderr);
319
442
  }
320
- const applicationIndexUploadScriptContent = createApplicationIndexUploadScript({
443
+ const applicationIndexUploadScriptContent = uploadScriptsGenerator.getApplicationIndexUploadScript({
444
+ storageProvider,
321
445
  packageManagerName: cliFlags.packageManagerName,
322
- bucketUrl: getApplicationIndexBucketUrl({
446
+ bucketUrl: storageProvider.getApplicationIndexBucketUrl({
323
447
  bucketRegion,
324
448
  prNumber: cliFlags.prNumber,
325
449
  applicationName: cliFlags.applicationName,
@@ -331,8 +455,6 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
331
455
  buildNumber: cliFlags.buildNumber,
332
456
  applicationIndexOutFile: cliFlags.applicationIndexOutFile
333
457
  });
334
- // Generate bash scripts to run the `gcloud storage` upload command.
335
-
336
458
  writeUploadScriptFile({
337
459
  fileName: cliFlags.applicationIndexUploadScriptOutFile,
338
460
  fileContent: applicationIndexUploadScriptContent,
@@ -340,23 +462,22 @@ async function compileEnvironmentApplicationIndexes(_ref6) {
340
462
  });
341
463
 
342
464
  // Move the compiled `index.html` to the deployments folder of the related cloud environment.
343
-
344
465
  const moveResult = await execa('mv', [path.join(paths.publicAssetsPath, 'index.html'), path.join(cloudEnvironmentDeploymentPath, cliFlags.applicationIndexOutFile)]);
345
466
  if (moveResult.failed) {
346
467
  throw new Error(moveResult.stderr);
347
468
  }
348
469
  }
349
470
  async function command$3(cliFlags, cwd) {
350
- var _context3;
471
+ var _context;
351
472
  let cloudEnvironmentsGroupedByBucketRegions;
352
473
  try {
353
474
  // This is the list of the supported cloud environments and their related bucket location.
354
475
  cloudEnvironmentsGroupedByBucketRegions = await buckedConfigExplorer.search();
355
476
  } catch (e) {
356
- throw new Error('Failed loading a Google Bucket configuration. Create a cosmiconfig for `google-storage-buckets` for example `google-storage-buckets.config.cjs`.');
477
+ throw new Error('Failed loading a storage bucket configuration. Create a cosmiconfig for `storage-buckets` for example `storage-buckets.config.cjs`.');
357
478
  }
358
479
  if (!cloudEnvironmentsGroupedByBucketRegions) {
359
- throw new Error('Failed loading a Google Bucket configuration');
480
+ throw new Error('Failed loading a storage bucket configuration');
360
481
  }
361
482
  const applicationDirectory = getApplicationDirectory(cwd);
362
483
  let assetsPath;
@@ -372,45 +493,67 @@ async function command$3(cliFlags, cwd) {
372
493
  dotenvPath: cliFlags.dotenvFolder && path.join(monorepoRoot.rootDir, cliFlags.dotenvFolder),
373
494
  assetsPath
374
495
  };
375
- const taskList = new Listr(_mapInstanceProperty(_context3 = _Object$entries(cloudEnvironmentsGroupedByBucketRegions.config)).call(_context3, _ref7 => {
376
- let _ref8 = _slicedToArray(_ref7, 2),
377
- bucketRegion = _ref8[0],
378
- bucketEnvironmentConfigs = _ref8[1];
496
+ const defaultStorageProviders = ['gs'];
497
+ const taskList = new Listr(_mapInstanceProperty(_context = _Object$entries(cloudEnvironmentsGroupedByBucketRegions.config)).call(_context, _ref4 => {
498
+ let _ref5 = _slicedToArray(_ref4, 2),
499
+ bucketRegion = _ref5[0],
500
+ bucketEnvironmentConfigs = _ref5[1];
379
501
  return {
380
502
  title: `Compiling for bucket region ${bucketRegion}`,
381
- task: () => {
382
- var _context4;
383
- return new Listr(_concatInstanceProperty(_context4 = _mapInstanceProperty(bucketEnvironmentConfigs).call(bucketEnvironmentConfigs, bucketEnvironmentConfigOrBucketEnvironment => {
384
- let cloudEnvironment = '';
385
- let bucketEnvironment = '';
386
- if (assertExpandedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment)) {
387
- cloudEnvironment = bucketEnvironmentConfigOrBucketEnvironment.cloudEnvironment;
388
- bucketEnvironment = bucketEnvironmentConfigOrBucketEnvironment.bucketEnvironment;
389
- } else if (assertCollapsedBucketEnvironmentConfig(bucketEnvironmentConfigOrBucketEnvironment)) {
390
- cloudEnvironment = bucketEnvironmentConfigOrBucketEnvironment;
391
- bucketEnvironment = bucketEnvironmentConfigOrBucketEnvironment;
392
- }
503
+ task: (_bucketRegionCtx, bucketRegionTask) => {
504
+ var _context2;
505
+ // NOTE: Application assets need to be compiled
506
+ // for all storage providers once per region.
507
+ const allStorageProvidersForBucketRegion = [...new _Set(_flatInstanceProperty(_context2 = _mapInstanceProperty(bucketEnvironmentConfigs).call(bucketEnvironmentConfigs, bucketEnvironmentConfig => bucketEnvironmentConfig.storageProviders || defaultStorageProviders)).call(_context2))];
508
+ const allApplicationAssetTasks = _mapInstanceProperty(allStorageProvidersForBucketRegion).call(allStorageProvidersForBucketRegion, storageProviderTag => {
509
+ const storageProvider = getStorageProvider(storageProviderTag);
510
+ const uploadScriptsGenerator = getUploadScriptsGenerator(storageProviderTag);
393
511
  return {
394
- title: `Compiling application index for environment ${cloudEnvironment} and bucket ${bucketEnvironment}`,
395
- task: () => compileEnvironmentApplicationIndexes({
512
+ title: `Compiling application assets for '${storageProviderTag}'`,
513
+ task: () => compileApplicationAssets({
396
514
  cliFlags,
397
- paths,
515
+ storageProvider,
516
+ uploadScriptsGenerator,
398
517
  bucketRegion,
399
- cloudEnvironment,
400
- bucketEnvironment
518
+ paths
401
519
  })
402
520
  };
403
- })).call(_context4, {
404
- title: `Compiling application assets`,
405
- task: () => compileApplicationAssets({
406
- cliFlags,
407
- bucketRegion,
408
- paths
409
- })
410
- }));
521
+ });
522
+ const allApplicationIndexTasks = _mapInstanceProperty(bucketEnvironmentConfigs).call(bucketEnvironmentConfigs, bucketEnvironmentConfig => {
523
+ const cloudEnvironment = bucketEnvironmentConfig.cloudEnvironment,
524
+ bucketEnvironment = bucketEnvironmentConfig.bucketEnvironment,
525
+ storageProviders = bucketEnvironmentConfig.storageProviders;
526
+ return {
527
+ title: `Compiling for cloud environment '${cloudEnvironment}'`,
528
+ task: (_storageProviderCtx, storageProviderTask) => {
529
+ var _context3;
530
+ const applicationIndexTasksForStorageProviders = _mapInstanceProperty(_context3 = storageProviders || defaultStorageProviders).call(_context3, storageProviderTag => {
531
+ const storageProvider = getStorageProvider(storageProviderTag);
532
+ const uploadScriptsGenerator = getUploadScriptsGenerator(storageProviderTag);
533
+ return {
534
+ title: `Compiling application index for storage provider '${storageProviderTag}'`,
535
+ task: () => {
536
+ return compileEnvironmentApplicationIndexes({
537
+ cliFlags,
538
+ storageProvider,
539
+ uploadScriptsGenerator,
540
+ paths,
541
+ bucketRegion,
542
+ cloudEnvironment,
543
+ bucketEnvironment
544
+ });
545
+ }
546
+ };
547
+ });
548
+ return storageProviderTask.newListr(applicationIndexTasksForStorageProviders);
549
+ }
550
+ };
551
+ });
552
+ return bucketRegionTask.newListr([...allApplicationIndexTasks, ...allApplicationAssetTasks]);
411
553
  }
412
554
  };
413
555
  }), {
556
+ // @ts-ignore
414
557
  renderer: isCI() ? 'verbose' : 'default'
415
558
  });
416
559
  await taskList.run();
@@ -494,6 +637,15 @@ const mapApplicationMenuConfigToGraqhQLMenuJson = config => {
494
637
  shouldRenderDivider: menuLinks.shouldRenderDivider ?? false
495
638
  };
496
639
  };
640
+
641
+ // During the migration to the Naming Convention Record for Cloud Environments
642
+ // we need to gracefully use the non-compliant and compliant environment names
643
+ // for staging to avoid a breaking release of the CLI.
644
+ const doesCloudEnvironmentExist = _ref => {
645
+ let dotenvPath = _ref.dotenvPath,
646
+ cloudEnvironment = _ref.cloudEnvironment;
647
+ return fs.existsSync(path.join(dotenvPath ?? '', cloudEnvironment));
648
+ };
497
649
  async function command$2(cliFlags, cwd) {
498
650
  const applicationDirectory = getApplicationDirectory(cwd);
499
651
  const monorepoRoot = findRootSync(cwd);
@@ -502,7 +654,11 @@ async function command$2(cliFlags, cwd) {
502
654
  dotenvPath,
503
655
  // The env itself is not important for the menu. However, the application config
504
656
  // uses environment placeholders and therefore we need to provide the variables for it.
505
- cloudEnvironment: 'ctp_staging_gcp_europe-west1_v1'
657
+ // TODO: Remove after all repositories migrated to NCR.
658
+ cloudEnvironment: doesCloudEnvironmentExist({
659
+ dotenvPath,
660
+ cloudEnvironment: '.env.ctp_staging_gcp_europe-west1_v1'
661
+ }) ? 'ctp_staging_gcp_europe-west1_v1' : 'ctp-gcp-staging'
506
662
  })), {}, {
507
663
  // Again, make sure that the environment is "development", otherwise
508
664
  // the menu config won't be available.
@@ -679,7 +835,7 @@ async function command(cliFlags) {
679
835
 
680
836
  var pkgJson = {
681
837
  name: "@commercetools-frontend/application-cli",
682
- version: "1.8.0",
838
+ version: "2.0.0",
683
839
  description: "Internal CLI to manage Merchant Center application deployments across various environments.",
684
840
  keywords: [
685
841
  "commercetools",
@@ -704,26 +860,25 @@ var pkgJson = {
704
860
  "@babel/core": "^7.22.11",
705
861
  "@babel/runtime": "^7.21.0",
706
862
  "@babel/runtime-corejs3": "^7.21.0",
707
- "@commercetools-frontend/application-config": "22.11.0",
708
- "@commercetools-frontend/constants": "22.11.0",
709
- "@commercetools-frontend/l10n": "22.11.0",
863
+ "@commercetools-frontend/application-config": "22.16.0",
864
+ "@commercetools-frontend/constants": "22.16.0",
865
+ "@commercetools-frontend/l10n": "22.16.0",
710
866
  "@manypkg/find-root": "2.2.1",
711
867
  cac: "^6.7.14",
712
- cosmiconfig: "8.3.6",
713
- dotenv: "16.3.1",
868
+ cosmiconfig: "9.0.0",
869
+ dotenv: "16.3.2",
714
870
  execa: "5.1.1",
715
871
  jsonschema: "^1.4.1",
716
- listr2: "6.6.1",
872
+ listr2: "8.0.1",
717
873
  "node-fetch": "2.7.0"
718
874
  },
719
875
  devDependencies: {
720
876
  "@tsconfig/node20": "20.1.2",
721
- "@types/node": "20.8.0",
722
- "@types/node-fetch": "2.6.2",
877
+ "@types/node": "20.11.5",
723
878
  typescript: "5.2.2"
724
879
  },
725
880
  engines: {
726
- node: ">=14",
881
+ node: ">=18",
727
882
  npm: ">=6"
728
883
  },
729
884
  publishConfig: {
@@ -1,2 +1,2 @@
1
1
  export * from "./declarations/src/index";
2
- //# sourceMappingURL=commercetools-frontend-application-cli.cjs.d.ts.map
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2V0b29scy1mcm9udGVuZC1hcHBsaWNhdGlvbi1jbGkuY2pzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuL2RlY2xhcmF0aW9ucy9zcmMvaW5kZXguZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSJ9
@@ -1 +1 @@
1
- export type { TGoogleStorageBucketsConfig } from "./types.js";
1
+ export type { TStorageBucketsConfig } from "./types.js";