@forge/cli 4.4.1 → 4.5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,91 @@
1
1
  # @forge/cli
2
2
 
3
+ ## 4.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d4a5150: Hide Jira servicedesk from the install upgrade and uninstall commands
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [7fe19b4]
12
+ - Updated dependencies [69f42bd]
13
+ - Updated dependencies [b447be2]
14
+ - Updated dependencies [e0f6a1c]
15
+ - Updated dependencies [8309725]
16
+ - Updated dependencies [4285fc3]
17
+ - Updated dependencies [74e00c8]
18
+ - @forge/lint@3.2.0
19
+ - @forge/cli-shared@2.6.0
20
+ - @forge/manifest@3.9.0
21
+ - @forge/bundler@3.0.9
22
+
23
+ ## 4.5.0-next.6
24
+
25
+ ### Patch Changes
26
+
27
+ - Updated dependencies [8309725]
28
+ - @forge/lint@3.2.0-next.5
29
+ - @forge/bundler@3.0.9-next.6
30
+
31
+ ## 4.5.0-next.5
32
+
33
+ ### Patch Changes
34
+
35
+ - Updated dependencies [7fe19b40]
36
+ - @forge/lint@3.1.3-next.4
37
+ - @forge/bundler@3.0.9-next.5
38
+
39
+ ## 4.5.0-next.4
40
+
41
+ ### Patch Changes
42
+
43
+ - Updated dependencies [4285fc36]
44
+ - @forge/manifest@3.9.0-next.2
45
+ - @forge/cli-shared@2.6.0-next.3
46
+ - @forge/lint@3.1.3-next.3
47
+ - @forge/bundler@3.0.9-next.4
48
+
49
+ ## 4.5.0-next.3
50
+
51
+ ### Patch Changes
52
+
53
+ - Updated dependencies [b447be27]
54
+ - @forge/manifest@3.9.0-next.1
55
+ - @forge/cli-shared@2.6.0-next.2
56
+ - @forge/lint@3.1.3-next.2
57
+ - @forge/bundler@3.0.9-next.3
58
+
59
+ ## 4.5.0-next.2
60
+
61
+ ### Minor Changes
62
+
63
+ - d4a5150e: Hide Jira servicedesk from the install upgrade and uninstall commands
64
+
65
+ ### Patch Changes
66
+
67
+ - Updated dependencies [74e00c86]
68
+ - @forge/manifest@3.8.2-next.0
69
+ - @forge/cli-shared@2.6.0-next.1
70
+ - @forge/lint@3.1.3-next.1
71
+ - @forge/bundler@3.0.9-next.2
72
+
73
+ ## 4.4.2-next.1
74
+
75
+ ### Patch Changes
76
+
77
+ - Updated dependencies [e0f6a1c9]
78
+ - @forge/bundler@3.0.9-next.1
79
+
80
+ ## 4.4.2-next.0
81
+
82
+ ### Patch Changes
83
+
84
+ - Updated dependencies [69f42bdc]
85
+ - @forge/cli-shared@2.6.0-next.0
86
+ - @forge/bundler@3.0.9-next.0
87
+ - @forge/lint@3.1.3-next.0
88
+
3
89
  ## 4.4.1
4
90
 
5
91
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli",
3
- "version": "4.4.1",
3
+ "version": "4.5.0",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -653,9 +653,9 @@
653
653
  "integrity": "sha512-+GFtFqBhFzwKaKmeEfw1jWQgZJNX4q11CCx1fSPFJB49Fdjb7k3lx74jAyzHlX0UWnm6DMK+/cYT7j5t6G9LfA=="
654
654
  },
655
655
  "@forge/bundler": {
656
- "version": "3.0.8",
657
- "resolved": "https://registry.npmjs.org/@forge/bundler/-/bundler-3.0.8.tgz",
658
- "integrity": "sha512-s9BKPoEcWBubf4XIueCHBansfL8mRB1FsdJA+BcFnDF0OrTUyFnzx1IelSEDT3XTWbrAkwNDMJS0Ng+EF5semQ==",
656
+ "version": "3.0.9",
657
+ "resolved": "https://registry.npmjs.org/@forge/bundler/-/bundler-3.0.9.tgz",
658
+ "integrity": "sha512-xI8pRf5v5Ur5A+Age6IyYAmme+QjGt32gy3vKoQjYoNEJefJUH2btlrT8oyjDa2MYi2jOWutgPXjgc0Mm5+VmQ==",
659
659
  "requires": {
660
660
  "@babel/core": "^7.16.7",
661
661
  "@babel/plugin-proposal-class-properties": "^7.16.7",
@@ -665,8 +665,8 @@
665
665
  "@babel/preset-typescript": "^7.16.7",
666
666
  "@forge/api": "2.7.0",
667
667
  "@forge/babel-plugin-transform-ui": "1.1.0",
668
- "@forge/cli-shared": "2.5.1",
669
- "@forge/lint": "3.1.2",
668
+ "@forge/cli-shared": "2.6.0",
669
+ "@forge/lint": "3.2.0",
670
670
  "assert": "^1.1.1",
671
671
  "babel-loader": "^8.2.3",
672
672
  "browserify-zlib": "^0.2.0",
@@ -712,11 +712,11 @@
712
712
  }
713
713
  },
714
714
  "@forge/cli-shared": {
715
- "version": "2.5.1",
716
- "resolved": "https://registry.npmjs.org/@forge/cli-shared/-/cli-shared-2.5.1.tgz",
717
- "integrity": "sha512-sUS6WO61TK1a5Y5/NlB47fOEXjkYvDASJbsYIq85PY7RzTrbrf9XozeOui8nhBuJaEy3/KOJTG7sSZ9RexKPmA==",
715
+ "version": "2.6.0",
716
+ "resolved": "https://registry.npmjs.org/@forge/cli-shared/-/cli-shared-2.6.0.tgz",
717
+ "integrity": "sha512-Rqq2RCgvrT9Wr3PVKtREATe4mycdnyhxc4PhE0YCDcSVsVVYDvqNGC/GnNsP3Z/9ghV8FN1XSQ12kL17pcf+Qw==",
718
718
  "requires": {
719
- "@forge/manifest": "3.8.1",
719
+ "@forge/manifest": "3.9.0",
720
720
  "@forge/util": "1.2.0",
721
721
  "array.prototype.flatmap": "^1.2.3",
722
722
  "case": "^1.6.2",
@@ -758,13 +758,13 @@
758
758
  }
759
759
  },
760
760
  "@forge/lint": {
761
- "version": "3.1.2",
762
- "resolved": "https://registry.npmjs.org/@forge/lint/-/lint-3.1.2.tgz",
763
- "integrity": "sha512-fYj+U0ZRvy8liRkybk5pR3pUopRs3khvU9vmpvguwfo9KzxiNOxL2M1DfuDQmHjAeSjjqmfspMJDsdoq8Q4ynw==",
761
+ "version": "3.2.0",
762
+ "resolved": "https://registry.npmjs.org/@forge/lint/-/lint-3.2.0.tgz",
763
+ "integrity": "sha512-EZGiyMxTAbz4Z9m88BkDxGbNzj2VOCdjHWngN6DRyduaZvg6uAAjfO2HqYcc71vW5tlmvlk18DrAzwMupAK0iA==",
764
764
  "requires": {
765
- "@forge/cli-shared": "2.5.1",
765
+ "@forge/cli-shared": "2.6.0",
766
766
  "@forge/csp": "1.11.0",
767
- "@forge/manifest": "3.8.1",
767
+ "@forge/manifest": "3.9.0",
768
768
  "@typescript-eslint/typescript-estree": "^3.5.0",
769
769
  "atlassian-openapi": "^1.0.13",
770
770
  "cross-spawn": "^7.0.1",
@@ -772,15 +772,16 @@
772
772
  }
773
773
  },
774
774
  "@forge/manifest": {
775
- "version": "3.8.1",
776
- "resolved": "https://registry.npmjs.org/@forge/manifest/-/manifest-3.8.1.tgz",
777
- "integrity": "sha512-kXqooktuU5tmIyQJ42XoQs74CnSrOdN2IYRbOpnHY+iMwPBjmXbpz7VCFc2VWApbaCDM1K+gch4qHaLPPvGuDw==",
775
+ "version": "3.9.0",
776
+ "resolved": "https://registry.npmjs.org/@forge/manifest/-/manifest-3.9.0.tgz",
777
+ "integrity": "sha512-3SHMefZDIalqanX2I9YnxgsN5egcGQkFSn+xQ9un9ifYX2DzUymZNyOespnz6TSSaNfCAW7mm2ibkm7v6sb7EA==",
778
778
  "requires": {
779
779
  "@forge/util": "1.2.0",
780
780
  "ajv": "^6.12.5",
781
781
  "cheerio": "^0.22.0",
782
782
  "js-yaml": "^3.13.1",
783
783
  "json-schema-to-typescript": "^9.1.1",
784
+ "lodash": "^4.17.20",
784
785
  "node-fetch": "2.6.1",
785
786
  "typescript-json-schema": "^0.45.1"
786
787
  }
@@ -69,7 +69,7 @@ class InstallController {
69
69
  return cli_shared_1.validateSite(trySite);
70
70
  }
71
71
  async promptForUpgrade(siteOption, productOption, environmentOption) {
72
- const { installations } = await this.installationService.listNonIdentityAppInstallations({
72
+ const { installations } = await this.installationService.listNonTechnicalAppInstallations({
73
73
  site: siteOption === null || siteOption === void 0 ? void 0 : siteOption.host,
74
74
  product: productOption,
75
75
  environment: environmentOption
@@ -136,7 +136,7 @@ class InstallController {
136
136
  const uniqueProductsFromScopes = this.getUniqueInstallationProductsFromScopes(environmentScopes);
137
137
  if (!uniqueProductsFromScopes || uniqueProductsFromScopes.length <= 1)
138
138
  return;
139
- const { installations } = await this.installationService.listNonIdentityAppInstallations({
139
+ const { installations } = await this.installationService.listNonTechnicalAppInstallations({
140
140
  site: site.host,
141
141
  environment
142
142
  });
@@ -1 +1 @@
1
- {"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA2D/D,eAAO,MAAM,sBAAsB,cACtB,MAAM,6CAC0B,YAAY,kBAwBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBACnB,YAAY,EAAE,6CACY,YAAY,kBA+CxD,CAAC;AA8DF,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAejE,CAAC"}
1
+ {"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA2D/D,eAAO,MAAM,sBAAsB,cACtB,MAAM,6CAC0B,YAAY,kBAwBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBACnB,YAAY,EAAE,6CACY,YAAY,kBA+CxD,CAAC;AAgEF,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAejE,CAAC"}
@@ -111,7 +111,7 @@ const registerUninstallCommand = (deps) => {
111
111
  await exports.performSingleUninstall(installId, deps);
112
112
  }
113
113
  else {
114
- const filteredInstallations = installations.filter((install) => install.product !== 'identity');
114
+ const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
115
115
  const selectedSitesIndexes = await ui.promptForTable(cli_shared_2.Text.uninstall.interactive.desc, cli_shared_2.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Product'], filteredInstallations.map(({ id, environmentKey, product, site }) => ({
116
116
  names: [cli_shared_1.environmentToOption(environmentKey), site, cli_shared_1.capitalizeProduct(product)],
117
117
  value: id
@@ -41,7 +41,7 @@ export declare class InstallationService {
41
41
  constructor(getAppConfig: AppConfigProvider, listInstallationsClient: ListAppInstallationsClient, upgradeAppInstallationsClient: UpgradeAppInstallationsClient);
42
42
  private filterInstallations;
43
43
  listAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
44
- listNonIdentityAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
44
+ listNonTechnicalAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
45
45
  hasOutdatedProductInstallation(environment: string): Promise<boolean>;
46
46
  upgradeInstallation(site: URL, product: string, environmentKey: string, appId: string): Promise<boolean>;
47
47
  private getPermissionsFromAppEnvironmentVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"installation-service.d.ts","sourceRoot":"","sources":["../../src/service/installation-service.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EAQf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,gCAAgC;IACjF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAID,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,6BAA6B;gBAF7B,YAAY,EAAE,iBAAiB,EAC/B,uBAAuB,EAAE,0BAA0B,EACnD,6BAA6B,EAAE,6BAA6B;IAG/E,OAAO,CAAC,mBAAmB;IAiBd,oBAAoB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAOlF,+BAA+B,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAM7F,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,mBAAmB,CAC9B,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAkBnB,OAAO,CAAC,uCAAuC;IAgBlC,4BAA4B,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;CA2BlD"}
1
+ {"version":3,"file":"installation-service.d.ts","sourceRoot":"","sources":["../../src/service/installation-service.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EAQf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,gCAAgC;IACjF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAKD,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,6BAA6B;gBAF7B,YAAY,EAAE,iBAAiB,EAC/B,uBAAuB,EAAE,0BAA0B,EACnD,6BAA6B,EAAE,6BAA6B;IAG/E,OAAO,CAAC,mBAAmB;IAiBd,oBAAoB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAOlF,gCAAgC,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAU9F,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,mBAAmB,CAC9B,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAkBnB,OAAO,CAAC,uCAAuC;IAgBlC,4BAA4B,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;CA2BlD"}
@@ -6,6 +6,7 @@ const csp_1 = require("@forge/csp");
6
6
  const lodash_1 = require("lodash");
7
7
  const graphql_client_1 = require("../installations/graphql-client");
8
8
  const IDENTITY_PRODUCT_NAME = 'identity';
9
+ const JIRA_SERVICE_DESK_PRODUCT_NAME = 'jira-servicedesk';
9
10
  class InstallationService {
10
11
  constructor(getAppConfig, listInstallationsClient, upgradeAppInstallationsClient) {
11
12
  this.getAppConfig = getAppConfig;
@@ -28,12 +29,14 @@ class InstallationService {
28
29
  const installations = await this.listInstallationsClient.listInstallations(appId);
29
30
  return { installations: this.filterInstallations(installations, Object.assign({}, filter)) };
30
31
  }
31
- async listNonIdentityAppInstallations(filter) {
32
+ async listNonTechnicalAppInstallations(filter) {
32
33
  const { installations } = await this.listAppInstallations(filter);
33
- return { installations: installations.filter(({ product }) => product !== IDENTITY_PRODUCT_NAME) };
34
+ return {
35
+ installations: installations.filter(({ product }) => product !== IDENTITY_PRODUCT_NAME && product !== JIRA_SERVICE_DESK_PRODUCT_NAME)
36
+ };
34
37
  }
35
38
  async hasOutdatedProductInstallation(environment) {
36
- const { installations } = await this.listNonIdentityAppInstallations({
39
+ const { installations } = await this.listNonTechnicalAppInstallations({
37
40
  environment
38
41
  });
39
42
  return installations.some((installation) => !installation.version.isLatest);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli",
3
- "version": "4.4.1",
3
+ "version": "4.5.0",
4
4
  "description": "A command line interface for managing Atlassian-hosted apps",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -18,11 +18,11 @@
18
18
  "postinstall": "node -e \"process.exitCode = fs.existsSync('./out/bin/postinstall.js')\" || node ./out/bin/postinstall.js"
19
19
  },
20
20
  "dependencies": {
21
- "@forge/bundler": "3.0.8",
22
- "@forge/cli-shared": "2.5.1",
21
+ "@forge/bundler": "3.0.9",
22
+ "@forge/cli-shared": "2.6.0",
23
23
  "@forge/csp": "^1.11.0",
24
- "@forge/lint": "3.1.2",
25
- "@forge/manifest": "3.8.1",
24
+ "@forge/lint": "3.2.0",
25
+ "@forge/manifest": "3.9.0",
26
26
  "@forge/util": "1.2.0",
27
27
  "ajv": "^6.12.5",
28
28
  "archiver": "^5.2.0",