@forge/cli 10.13.6 → 11.0.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 +203 -0
- package/LICENSE.txt +7 -0
- package/npm-shrinkwrap.json +142 -130
- package/out/autocomplete/autocomplete-config.json +26 -0
- package/out/command-line/command.d.ts +15 -2
- package/out/command-line/command.d.ts.map +1 -1
- package/out/command-line/command.js +29 -6
- package/out/command-line/controller/deploy-controller.d.ts.map +1 -1
- package/out/command-line/controller/deploy-controller.js +4 -7
- package/out/command-line/controller/install-controller.d.ts +3 -3
- package/out/command-line/controller/install-controller.d.ts.map +1 -1
- package/out/command-line/controller/install-controller.js +16 -13
- package/out/command-line/controller/version-controller.d.ts +36 -0
- package/out/command-line/controller/version-controller.d.ts.map +1 -0
- package/out/command-line/controller/version-controller.js +114 -0
- package/out/command-line/dependency-injection.d.ts +4 -1
- package/out/command-line/dependency-injection.d.ts.map +1 -1
- package/out/command-line/dependency-injection.js +14 -6
- package/out/command-line/index.d.ts +1 -1
- package/out/command-line/index.d.ts.map +1 -1
- package/out/command-line/index.js +6 -4
- package/out/command-line/register-app-commands.d.ts.map +1 -1
- package/out/command-line/register-app-commands.js +9 -1
- package/out/command-line/register-installation-commands.d.ts +2 -10
- package/out/command-line/register-installation-commands.d.ts.map +1 -1
- package/out/command-line/register-installation-commands.js +29 -32
- package/out/command-line/register-version-commands.d.ts +4 -0
- package/out/command-line/register-version-commands.d.ts.map +1 -0
- package/out/command-line/register-version-commands.js +76 -0
- package/out/command-line/register-webtrigger-commands.d.ts +1 -1
- package/out/command-line/register-webtrigger-commands.d.ts.map +1 -1
- package/out/command-line/register-webtrigger-commands.js +13 -5
- package/out/command-line/view/deploy-view.d.ts +1 -1
- package/out/command-line/view/deploy-view.d.ts.map +1 -1
- package/out/command-line/view/deploy-view.js +2 -2
- package/out/command-line/view/version-view.d.ts +26 -0
- package/out/command-line/view/version-view.d.ts.map +1 -0
- package/out/command-line/view/version-view.js +198 -0
- package/out/environment/graphql-client.d.ts +1 -0
- package/out/environment/graphql-client.d.ts.map +1 -1
- package/out/environment/graphql-client.js +3 -1
- package/out/environment/list-environment.d.ts +1 -0
- package/out/environment/list-environment.d.ts.map +1 -1
- package/out/installations/graphql-client.d.ts +6 -5
- package/out/installations/graphql-client.d.ts.map +1 -1
- package/out/installations/graphql-client.js +44 -7
- package/out/installations/installation-helper.d.ts.map +1 -1
- package/out/installations/installation-helper.js +1 -1
- package/out/installations/site-translation/bitbucket.d.ts +3 -4
- package/out/installations/site-translation/bitbucket.d.ts.map +1 -1
- package/out/installations/site-translation/bitbucket.js +1 -1
- package/out/installations/site-translation/index.d.ts +1 -1
- package/out/installations/site-translation/index.d.ts.map +1 -1
- package/out/installations/site-translation/index.js +1 -1
- package/out/installations/site-translation/site-translation.d.ts +3 -4
- package/out/installations/site-translation/site-translation.d.ts.map +1 -1
- package/out/installations/site-translation/sited-products.d.ts +29 -0
- package/out/installations/site-translation/sited-products.d.ts.map +1 -0
- package/out/installations/site-translation/sited-products.js +133 -0
- package/out/service/installation-service.d.ts +18 -4
- package/out/service/installation-service.d.ts.map +1 -1
- package/out/service/installation-service.js +44 -10
- package/out/service/tunnel-service.d.ts.map +1 -1
- package/out/service/tunnel-service.js +1 -1
- package/out/service/version-service.d.ts +77 -0
- package/out/service/version-service.d.ts.map +1 -0
- package/out/service/version-service.js +163 -0
- package/out/version/graphql-client.d.ts +25 -0
- package/out/version/graphql-client.d.ts.map +1 -0
- package/out/version/graphql-client.js +144 -0
- package/package.json +13 -11
- package/out/installations/site-translation/cloudid-products.d.ts +0 -25
- package/out/installations/site-translation/cloudid-products.d.ts.map +0 -1
- package/out/installations/site-translation/cloudid-products.js +0 -103
|
@@ -69,6 +69,10 @@ const graphql_client_8 = require("../eligibility/graphql-client");
|
|
|
69
69
|
const roa_service_1 = require("../service/roa-service");
|
|
70
70
|
const eligibility_controller_1 = require("./controller/eligibility-controller");
|
|
71
71
|
const eligibility_view_1 = require("./view/eligibility-view");
|
|
72
|
+
const version_controller_1 = require("./controller/version-controller");
|
|
73
|
+
const version_service_1 = require("../service/version-service");
|
|
74
|
+
const version_view_1 = require("./view/version-view");
|
|
75
|
+
const graphql_client_9 = require("../version/graphql-client");
|
|
72
76
|
const getDependencies = async (cliDetails) => {
|
|
73
77
|
let cmd;
|
|
74
78
|
const ui = new cli_shared_1.CommandLineUI(() => cmd.verbose);
|
|
@@ -93,6 +97,7 @@ const getDependencies = async (cliDetails) => {
|
|
|
93
97
|
const credentialStore = (0, cli_shared_1.getCredentialStore)(ui, userRepository);
|
|
94
98
|
const featureFlagService = new cli_shared_1.FeatureFlagService(ui, cliDetails, credentialStore, appConfigReader);
|
|
95
99
|
const statsigService = new cli_shared_1.StatsigService(ui, cliDetails, credentialStore, appConfigReader);
|
|
100
|
+
const supportedProductsService = new cli_shared_1.SupportedProductsService(statsigService);
|
|
96
101
|
const settingsView = new settings_view_1.SettingsView(ui);
|
|
97
102
|
const settingsController = new settings_controller_1.SettingsController(settingsView, cachedConfigService, assertiveAppConfigReader);
|
|
98
103
|
const liteLintView = new lite_lint_view_1.LiteLintView(ui);
|
|
@@ -139,7 +144,7 @@ const getDependencies = async (cliDetails) => {
|
|
|
139
144
|
const customEntitiesService = new custom_entities_service_1.CustomEntitiesService(assertiveAppConfigReader, appOauthClientGraphql, entitiesClient);
|
|
140
145
|
const listEntitiesIndexesCommand = new list_indexes_1.ListEntitiesIndexesCommand(customEntitiesService);
|
|
141
146
|
const bitbucketTranslation = new site_translation_1.BitbucketTranslator();
|
|
142
|
-
const cloudProductTranslation = new site_translation_1.
|
|
147
|
+
const cloudProductTranslation = new site_translation_1.SitedProductTranslator(graphQLClient);
|
|
143
148
|
const installationsClient = new graphql_client_6.InstallationsGraphqlClient(graphQLClient, cloudProductTranslation, bitbucketTranslation, cli_shared_1.pause);
|
|
144
149
|
const installAppSiteCommand = new install_app_site_1.InstallAppSiteCommand(assertiveAppConfigReader, installationsClient);
|
|
145
150
|
const uninstallAppCommand = new uninstall_app_1.UninstallAppCommand(assertiveAppConfigReader, installationsClient);
|
|
@@ -159,11 +164,12 @@ const getDependencies = async (cliDetails) => {
|
|
|
159
164
|
const nodeAppPackager = new deploy_1.AppPackager(nodeRuntimeBundler, nativeUiBundler, ui);
|
|
160
165
|
const getWebTriggerURLCommand = new get_webtrigger_url_1.GetWebTriggerURLCommand(assertiveAppConfigReader, installationsClient, appEnvironmentClient, webTriggerGraphqlClient);
|
|
161
166
|
const autocompleteController = new autocomplete_controller_1.AutocompleteController(ui);
|
|
162
|
-
const installationsService = new installation_service_1.InstallationService(assertiveAppConfigReader, installationsClient, installationsClient);
|
|
167
|
+
const installationsService = new installation_service_1.InstallationService(assertiveAppConfigReader, installationsClient, installationsClient, installationsClient);
|
|
163
168
|
const installView = new install_view_1.InstallView(ui);
|
|
164
|
-
const installController = new install_controller_1.InstallController(assertiveAppConfigReader, configFile, ui, installAppSiteCommand, installationsService, installView,
|
|
169
|
+
const installController = new install_controller_1.InstallController(assertiveAppConfigReader, configFile, ui, installAppSiteCommand, installationsService, installView, supportedProductsService);
|
|
165
170
|
const feedbackController = new feedback_controller_1.FeedbackController(credentialStore, feedbackPostClient);
|
|
166
171
|
const eligibilityController = new eligibility_controller_1.EligibilityController(new roa_service_1.RoaService(assertiveAppConfigReader, new graphql_client_8.RoaEligibilityClient(graphQLClient)), new eligibility_view_1.EligibilityView(ui));
|
|
172
|
+
const versionController = new version_controller_1.VersionController(new version_service_1.VersionService(assertiveAppConfigReader, new graphql_client_9.AppVersionDetailsClient(graphQLClient)), new version_view_1.VersionView(ui));
|
|
167
173
|
const lintService = new lint_service_1.LintService(configFile, fileReader);
|
|
168
174
|
const lintView = new lint_view_1.LintView(ui);
|
|
169
175
|
const lintController = new lint_controller_1.LintController(lintService, lintView);
|
|
@@ -192,7 +198,7 @@ const getDependencies = async (cliDetails) => {
|
|
|
192
198
|
const stubController = new stubController_1.StubController();
|
|
193
199
|
const prerequisitesController = new prerequisites_controller_1.PrerequisitesController(ui, cliDetails);
|
|
194
200
|
const defaultEnvironmentController = new default_environment_controller_1.DefaultEnvironmentController(ui, credentialStore, cachedConfigService, assertiveAppConfigReader, userRepository, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery);
|
|
195
|
-
cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService);
|
|
201
|
+
cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService, supportedProductsService);
|
|
196
202
|
return {
|
|
197
203
|
ui,
|
|
198
204
|
cmd,
|
|
@@ -228,7 +234,8 @@ const getDependencies = async (cliDetails) => {
|
|
|
228
234
|
migrationKeysService,
|
|
229
235
|
customEntitiesService,
|
|
230
236
|
credentialStore,
|
|
231
|
-
userRepository
|
|
237
|
+
userRepository,
|
|
238
|
+
supportedProductsService
|
|
232
239
|
},
|
|
233
240
|
controllers: {
|
|
234
241
|
autocompleteController,
|
|
@@ -242,7 +249,8 @@ const getDependencies = async (cliDetails) => {
|
|
|
242
249
|
settingsController,
|
|
243
250
|
stubController,
|
|
244
251
|
prerequisitesController,
|
|
245
|
-
defaultEnvironmentController
|
|
252
|
+
defaultEnvironmentController,
|
|
253
|
+
versionController
|
|
246
254
|
}
|
|
247
255
|
};
|
|
248
256
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Dependencies } from './dependency-injection';
|
|
2
|
-
export declare function registerCommands(deps: Dependencies): void
|
|
2
|
+
export declare function registerCommands(deps: Dependencies): Promise<void>;
|
|
3
3
|
export declare const main: () => Promise<void>;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAqBvE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,YAAY,iBAkBxD;AAQD,eAAO,MAAM,IAAI,QAAa,QAAQ,IAAI,CAUzC,CAAC"}
|
|
@@ -20,23 +20,25 @@ const register_providers_commands_1 = require("./register-providers-commands");
|
|
|
20
20
|
const register_environments_commands_1 = require("./register-environments-commands");
|
|
21
21
|
const register_storage_commands_1 = require("./register-storage-commands");
|
|
22
22
|
const register_eligibility_commands_1 = require("./register-eligibility-commands");
|
|
23
|
-
|
|
23
|
+
const register_version_commands_1 = require("./register-version-commands");
|
|
24
|
+
async function registerCommands(deps) {
|
|
24
25
|
(0, register_autocomplete_commands_1.registerCommands)(deps);
|
|
25
26
|
(0, register_authentication_command_1.registerCommands)(deps);
|
|
26
27
|
(0, register_app_commands_1.registerCommands)(deps);
|
|
27
28
|
(0, register_deployment_commands_1.registerCommands)(deps);
|
|
28
|
-
(0, register_installation_commands_1.registerCommands)(deps);
|
|
29
|
+
await (0, register_installation_commands_1.registerCommands)(deps);
|
|
29
30
|
(0, register_environments_commands_1.registerCommands)(deps);
|
|
30
31
|
(0, register_environment_variables_commands_1.registerCommands)(deps);
|
|
31
32
|
(0, register_lint_command_1.registerCommands)(deps);
|
|
32
33
|
(0, register_log_commands_1.registerCommands)(deps);
|
|
33
34
|
(0, register_tunnel_commands_1.registerCommands)(deps);
|
|
34
|
-
(0, register_webtrigger_commands_1.registerCommands)(deps);
|
|
35
|
+
await (0, register_webtrigger_commands_1.registerCommands)(deps);
|
|
35
36
|
(0, register_feedback_commands_1.registerCommands)(deps);
|
|
36
37
|
(0, register_settings_commands_1.registerCommands)(deps);
|
|
37
38
|
(0, register_providers_commands_1.registerCommands)(deps);
|
|
38
39
|
(0, register_storage_commands_1.registerCommands)(deps);
|
|
39
40
|
(0, register_eligibility_commands_1.registerCommands)(deps);
|
|
41
|
+
(0, register_version_commands_1.registerCommands)(deps);
|
|
40
42
|
}
|
|
41
43
|
exports.registerCommands = registerCommands;
|
|
42
44
|
const registerEvents = ({ ui }) => {
|
|
@@ -48,7 +50,7 @@ const main = async () => {
|
|
|
48
50
|
const cliDetails = (0, version_info_1.getCLIDetails)();
|
|
49
51
|
const deps = await (0, dependency_injection_1.getDependencies)(cliDetails);
|
|
50
52
|
registerEvents(deps);
|
|
51
|
-
registerCommands(deps);
|
|
53
|
+
await registerCommands(deps);
|
|
52
54
|
await deps.controllers.prerequisitesController.check();
|
|
53
55
|
await deps.cmd.parse(process.argv);
|
|
54
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAqB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAqB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAuBtD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AA6CD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC1B,OAAO,CAQT;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,aAAa,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,GACnD,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AAuJD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAGlD"}
|
|
@@ -13,7 +13,15 @@ var TemplateCategory;
|
|
|
13
13
|
TemplateCategory["CUSTOM_UI"] = "Custom UI";
|
|
14
14
|
TemplateCategory["BACKEND"] = "Triggers and Validators";
|
|
15
15
|
})(TemplateCategory || (TemplateCategory = {}));
|
|
16
|
-
const PRODUCT_OPTIONS = [
|
|
16
|
+
const PRODUCT_OPTIONS = [
|
|
17
|
+
'show-all',
|
|
18
|
+
'bitbucket',
|
|
19
|
+
'compass',
|
|
20
|
+
'confluence',
|
|
21
|
+
'jira',
|
|
22
|
+
'jira-service-management',
|
|
23
|
+
'teamwork-graph'
|
|
24
|
+
];
|
|
17
25
|
const MAX_NAME_LENGTH = 60;
|
|
18
26
|
function formatProduct(product) {
|
|
19
27
|
return product
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { URL } from 'url';
|
|
3
1
|
import { Dependencies } from './dependency-injection';
|
|
4
2
|
import { Installation } from '../service/installation-service';
|
|
5
|
-
export declare
|
|
6
|
-
site?: string;
|
|
7
|
-
product?: string;
|
|
8
|
-
}): Promise<{
|
|
9
|
-
siteURL?: URL;
|
|
10
|
-
product?: string;
|
|
11
|
-
}>;
|
|
3
|
+
export declare const registerListInstallationsCommand: ({ cmd, ui, services: { installationsService } }: Dependencies) => void;
|
|
12
4
|
export declare const performSingleUninstall: (installId: string, { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
|
|
13
5
|
export declare const performMultipleUninstalls: (appsToUninstall: Installation[], { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
|
|
14
|
-
export declare const registerCommands: ({ cmd, ...deps }: Dependencies) => void
|
|
6
|
+
export declare const registerCommands: ({ cmd, ...deps }: Dependencies) => Promise<void>;
|
|
15
7
|
//# sourceMappingURL=register-installation-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAqD/D,eAAO,MAAM,gCAAgC,oDAAqD,YAAY,SAmC7G,CAAC;AAEF,eAAO,MAAM,sBAAsB,cACtB,MAAM,6CAC0B,YAAY,kBAuBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,oBACnB,YAAY,EAAE,6CACY,YAAY,kBA8CxD,CAAC;AAsEF,eAAO,MAAM,gBAAgB,qBAA4B,YAAY,KAAG,QAAQ,IAAI,CAenF,CAAC"}
|
|
@@ -1,29 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.
|
|
3
|
+
exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.registerListInstallationsCommand = void 0;
|
|
4
4
|
const cli_shared_1 = require("@forge/cli-shared");
|
|
5
5
|
const shared_1 = require("../installations/shared");
|
|
6
6
|
const errors_1 = require("./errors");
|
|
7
7
|
const semver_1 = require("semver");
|
|
8
8
|
const COMMAND_NAME = 'install';
|
|
9
|
-
async
|
|
10
|
-
|
|
11
|
-
product = (0, cli_shared_1.productDisplayName)(product);
|
|
12
|
-
if (!(0, cli_shared_1.isSupportedProduct)(product)) {
|
|
13
|
-
throw new cli_shared_1.ValidationError(cli_shared_1.Text.error.invalidProduct);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const siteURL = site ? (0, cli_shared_1.validateSite)(site, product) : undefined;
|
|
17
|
-
return { siteURL, product };
|
|
18
|
-
}
|
|
19
|
-
exports.validateContext = validateContext;
|
|
20
|
-
const registerInstallAppCommand = ({ cmd, controllers: { installController } }) => {
|
|
9
|
+
const registerInstallAppCommand = async ({ cmd, controllers: { installController }, services: { supportedProductsService } }) => {
|
|
10
|
+
const supportedProducts = await supportedProductsService.getSupportedProducts();
|
|
21
11
|
cmd
|
|
22
12
|
.requireAppId()
|
|
23
13
|
.environmentOption()
|
|
24
|
-
.
|
|
25
|
-
.option('-p, --product [product]', cli_shared_1.Text.optionProduct((0, cli_shared_1.getSupportedProducts)()))
|
|
26
|
-
.precondition(validateContext)
|
|
14
|
+
.contextOption(supportedProducts)
|
|
27
15
|
.option('--upgrade', cli_shared_1.Text.install.optionUpgrade, false)
|
|
28
16
|
.option('--confirm-scopes', cli_shared_1.Text.install.optionConfirmScopes, false)
|
|
29
17
|
.option('-l, --license [license]', cli_shared_1.Text.install.optionLicense)
|
|
@@ -31,10 +19,10 @@ const registerInstallAppCommand = ({ cmd, controllers: { installController } })
|
|
|
31
19
|
.option('--users-with-access [user...]', cli_shared_1.Text.install.optionUsersWithAccess)
|
|
32
20
|
.nonInteractiveOption('--site', '--product', '--environment')
|
|
33
21
|
.description(cli_shared_1.Text.install.cmd.description)
|
|
34
|
-
.action(async ({ environment,
|
|
22
|
+
.action(async ({ environment, site, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) => {
|
|
35
23
|
await installController.run({
|
|
36
24
|
environment,
|
|
37
|
-
site
|
|
25
|
+
site,
|
|
38
26
|
product,
|
|
39
27
|
upgrade,
|
|
40
28
|
confirmScopes,
|
|
@@ -54,18 +42,19 @@ const registerListInstallationsCommand = ({ cmd, ui, services: { installationsSe
|
|
|
54
42
|
.description(cli_shared_1.Text.installList.cmd)
|
|
55
43
|
.action(async ({ json }) => {
|
|
56
44
|
const { installations } = await installationsService.listAppInstallations();
|
|
45
|
+
const hasSecondaryInstallations = installations.some(({ secondaryProducts }) => secondaryProducts?.length);
|
|
57
46
|
ui.table([
|
|
58
47
|
['id', 'Installation ID'],
|
|
59
48
|
['environment', 'Environment'],
|
|
60
49
|
['site', 'Site'],
|
|
61
|
-
['product', 'Product'],
|
|
50
|
+
['product', hasSecondaryInstallations ? 'Product(s)' : 'Product'],
|
|
62
51
|
['version', 'Version'],
|
|
63
52
|
['majorVersion', 'Major Version']
|
|
64
|
-
], installations.map(({ id, environmentKey, product, site, version: { isLatest, version } }) => ({
|
|
53
|
+
], installations.map(({ id, environmentKey, product, secondaryProducts, site, version: { isLatest, version } }) => ({
|
|
65
54
|
id,
|
|
66
55
|
environment: (0, cli_shared_1.environmentToOption)(environmentKey),
|
|
67
56
|
site,
|
|
68
|
-
product: (0, cli_shared_1.
|
|
57
|
+
product: (0, cli_shared_1.productsDisplayName)(product, secondaryProducts),
|
|
69
58
|
version: cli_shared_1.Text.install.booleanToScope(isLatest),
|
|
70
59
|
majorVersion: (0, semver_1.major)(version).toString()
|
|
71
60
|
})), {
|
|
@@ -75,6 +64,7 @@ const registerListInstallationsCommand = ({ cmd, ui, services: { installationsSe
|
|
|
75
64
|
});
|
|
76
65
|
});
|
|
77
66
|
};
|
|
67
|
+
exports.registerListInstallationsCommand = registerListInstallationsCommand;
|
|
78
68
|
const performSingleUninstall = async (installId, { ui, commands: { uninstallAppCommand } }) => {
|
|
79
69
|
const installation = await ui.displayProgress(() => uninstallAppCommand.execute(installId), cli_shared_1.Text.uninstall.cmd.start, (result) => ({
|
|
80
70
|
successful: !!result.successful,
|
|
@@ -121,24 +111,31 @@ const performMultipleUninstalls = async (appsToUninstall, { ui, commands: { unin
|
|
|
121
111
|
}
|
|
122
112
|
};
|
|
123
113
|
exports.performMultipleUninstalls = performMultipleUninstalls;
|
|
124
|
-
const registerUninstallCommand = (deps) => {
|
|
125
|
-
const { cmd, ui, services: { installationsService } } = deps;
|
|
114
|
+
const registerUninstallCommand = async (deps) => {
|
|
115
|
+
const { cmd, ui, services: { installationsService, supportedProductsService } } = deps;
|
|
116
|
+
const supportedProducts = await supportedProductsService.getSupportedProducts();
|
|
126
117
|
cmd
|
|
127
|
-
.command('uninstall
|
|
118
|
+
.command('uninstall')
|
|
119
|
+
.contextOption(supportedProducts)
|
|
120
|
+
.environmentOption()
|
|
128
121
|
.requireAppId()
|
|
129
122
|
.description(cli_shared_1.Text.uninstall.cmd.desc)
|
|
130
|
-
.action(async (
|
|
123
|
+
.action(async ({ site, environment, product }) => {
|
|
131
124
|
const { installations } = await installationsService.listAppInstallations();
|
|
132
125
|
if (!installations.length) {
|
|
133
126
|
ui.info(cli_shared_1.Text.installList.noInstallations);
|
|
134
127
|
return;
|
|
135
128
|
}
|
|
136
|
-
|
|
137
|
-
|
|
129
|
+
if (site && product) {
|
|
130
|
+
const installation = await installationsService.findOnlyMatchingInstallation({
|
|
131
|
+
site,
|
|
132
|
+
product,
|
|
133
|
+
environment
|
|
134
|
+
});
|
|
138
135
|
ui.info(cli_shared_1.Text.uninstall.info);
|
|
139
136
|
ui.info(cli_shared_1.Text.ctrlC);
|
|
140
137
|
ui.emptyLine();
|
|
141
|
-
await (0, exports.performSingleUninstall)(
|
|
138
|
+
await (0, exports.performSingleUninstall)(installation.id, deps);
|
|
142
139
|
}
|
|
143
140
|
else {
|
|
144
141
|
const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
|
|
@@ -160,11 +157,11 @@ const registerUninstallCommand = (deps) => {
|
|
|
160
157
|
});
|
|
161
158
|
};
|
|
162
159
|
const DEPRECATED_LIST_COMMAND = 'install:list';
|
|
163
|
-
const registerCommands = ({ cmd, ...deps }) => {
|
|
160
|
+
const registerCommands = async ({ cmd, ...deps }) => {
|
|
164
161
|
const install = cmd.command(COMMAND_NAME).description(cli_shared_1.Text.variables.description);
|
|
165
|
-
registerUninstallCommand({ cmd, ...deps });
|
|
162
|
+
await registerUninstallCommand({ cmd, ...deps });
|
|
166
163
|
cmd.deprecatedCommand(DEPRECATED_LIST_COMMAND, `${COMMAND_NAME} ${LIST_COMMAND_NAME}`, deps.controllers.stubController);
|
|
167
|
-
registerInstallAppCommand({ cmd: install, ...deps });
|
|
168
|
-
registerListInstallationsCommand({ cmd: install, ...deps });
|
|
164
|
+
await registerInstallAppCommand({ cmd: install, ...deps });
|
|
165
|
+
(0, exports.registerListInstallationsCommand)({ cmd: install, ...deps });
|
|
169
166
|
};
|
|
170
167
|
exports.registerCommands = registerCommands;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Dependencies } from './dependency-injection';
|
|
2
|
+
export declare function parseMajorVersion(majorVersionStr: string, property?: string): number;
|
|
3
|
+
export declare const registerCommands: (deps: Dependencies) => void;
|
|
4
|
+
//# sourceMappingURL=register-version-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-version-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-version-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASpF;AA2DD,eAAO,MAAM,gBAAgB,SAAU,YAAY,SAMlD,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCommands = exports.parseMajorVersion = void 0;
|
|
4
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
5
|
+
function parseMajorVersion(majorVersionStr, property) {
|
|
6
|
+
if (!/^\d+$/.test(majorVersionStr)) {
|
|
7
|
+
throw new cli_shared_1.ValidationError(cli_shared_1.Text.version.check.error.invalidMajorVersion(property));
|
|
8
|
+
}
|
|
9
|
+
const version = parseInt(majorVersionStr, 10);
|
|
10
|
+
if (version < 1) {
|
|
11
|
+
throw new cli_shared_1.ValidationError(cli_shared_1.Text.version.check.error.invalidMajorVersion(property));
|
|
12
|
+
}
|
|
13
|
+
return version;
|
|
14
|
+
}
|
|
15
|
+
exports.parseMajorVersion = parseMajorVersion;
|
|
16
|
+
const registerDetailsCommands = (parent, { controllers: { versionController } }) => {
|
|
17
|
+
parent
|
|
18
|
+
.command(cli_shared_1.Text.version.check.cmdName)
|
|
19
|
+
.description(cli_shared_1.Text.version.check.desc)
|
|
20
|
+
.requireAppId()
|
|
21
|
+
.environmentOption()
|
|
22
|
+
.nonInteractiveOption()
|
|
23
|
+
.option('-v, --major-version [version]', cli_shared_1.Text.version.check.option.majorVersion)
|
|
24
|
+
.option('--json', cli_shared_1.Text.version.check.option.json)
|
|
25
|
+
.option('-f, --out-file [outFile]', cli_shared_1.Text.version.check.option.outFile)
|
|
26
|
+
.action(async ({ environment, majorVersion, json, outFile, nonInteractive }) => {
|
|
27
|
+
const majorVersionInt = majorVersion ? parseMajorVersion(majorVersion) : undefined;
|
|
28
|
+
await versionController.getAppVersionDetails({
|
|
29
|
+
environment,
|
|
30
|
+
majorVersion: majorVersionInt,
|
|
31
|
+
json,
|
|
32
|
+
outFile,
|
|
33
|
+
nonInteractive
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
const registerListCommands = (parent, { controllers: { versionController } }) => {
|
|
38
|
+
parent
|
|
39
|
+
.command(cli_shared_1.Text.version.list.cmdName)
|
|
40
|
+
.description(cli_shared_1.Text.version.list.desc)
|
|
41
|
+
.requireAppId()
|
|
42
|
+
.environmentOption()
|
|
43
|
+
.nonInteractiveOption()
|
|
44
|
+
.option('--json', cli_shared_1.Text.version.list.option.json)
|
|
45
|
+
.option('-f, --out-file [outFile]', cli_shared_1.Text.version.list.option.outFile)
|
|
46
|
+
.action(async ({ environment, json, outFile, nonInteractive }) => {
|
|
47
|
+
await versionController.getVersionList({ environment, json, outFile, nonInteractive });
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const registerDiffCommands = (parent, { controllers: { versionController } }) => {
|
|
51
|
+
parent
|
|
52
|
+
.command(cli_shared_1.Text.version.diff.cmdName)
|
|
53
|
+
.description(cli_shared_1.Text.version.diff.desc)
|
|
54
|
+
.requireAppId()
|
|
55
|
+
.environmentOption()
|
|
56
|
+
.nonInteractiveOption()
|
|
57
|
+
.option('-v1, --version1 [version]', cli_shared_1.Text.version.diff.option.version1)
|
|
58
|
+
.option('-v2, --version2 [version]', cli_shared_1.Text.version.diff.option.version2)
|
|
59
|
+
.option('-f, --out-file [outFile]', cli_shared_1.Text.version.diff.option.outFile)
|
|
60
|
+
.action(async ({ environment, version1, version2, outFile }) => {
|
|
61
|
+
if (!version1 || !version2) {
|
|
62
|
+
throw new cli_shared_1.ValidationError(cli_shared_1.Text.version.diff.error.noVersionProvided);
|
|
63
|
+
}
|
|
64
|
+
const version1Int = parseMajorVersion(version1, '--version1');
|
|
65
|
+
const version2Int = parseMajorVersion(version2, '--version2');
|
|
66
|
+
await versionController.getAppVersionDiff({ environment, version1: version1Int, version2: version2Int, outFile });
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
const registerCommands = (deps) => {
|
|
70
|
+
const { cmd } = deps;
|
|
71
|
+
const version = cmd.command(cli_shared_1.Text.version.cmd.cmdName).description(cli_shared_1.Text.version.cmd.desc);
|
|
72
|
+
registerDetailsCommands(version, deps);
|
|
73
|
+
registerDiffCommands(version, deps);
|
|
74
|
+
registerListCommands(version, deps);
|
|
75
|
+
};
|
|
76
|
+
exports.registerCommands = registerCommands;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Dependencies } from './dependency-injection';
|
|
2
|
-
export declare const registerCommands: ({ cmd, ui,
|
|
2
|
+
export declare const registerCommands: ({ cmd, ui, configFile, services: { installationsService, supportedProductsService }, commands: { getWebTriggerURLCommand } }: Dependencies) => Promise<void>;
|
|
3
3
|
//# sourceMappingURL=register-webtrigger-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-webtrigger-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-webtrigger-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgCtD,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"register-webtrigger-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-webtrigger-commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgCtD,eAAO,MAAM,gBAAgB,iIAM1B,YAAY,kBAyDd,CAAC"}
|
|
@@ -26,7 +26,7 @@ function manifestDefinesTriggers(configFile) {
|
|
|
26
26
|
await getValidWebtriggers(configFile);
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
const registerCommands = ({ cmd, ui,
|
|
29
|
+
const registerCommands = async ({ cmd, ui, configFile, services: { installationsService, supportedProductsService }, commands: { getWebTriggerURLCommand } }) => {
|
|
30
30
|
const validateWebtriggerKey = async (functionKey) => {
|
|
31
31
|
const availableWebTriggers = await getValidWebtriggers(configFile);
|
|
32
32
|
if (functionKey) {
|
|
@@ -40,17 +40,25 @@ const registerCommands = ({ cmd, ui, graphqlGateway, configFile, services: { ins
|
|
|
40
40
|
return await ui.promptForList(cli_shared_1.Text.webtrigger.promptFuncKey, options);
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
|
+
const supportedProducts = await supportedProductsService.getSupportedProducts();
|
|
43
44
|
cmd
|
|
44
|
-
.command('webtrigger
|
|
45
|
+
.command('webtrigger')
|
|
45
46
|
.requireAppId()
|
|
46
47
|
.description(cli_shared_1.Text.webtrigger.cmd)
|
|
47
48
|
.option('-f, --functionKey [function]', cli_shared_1.Text.webtrigger.optionFuncKey)
|
|
49
|
+
.contextOption(supportedProducts)
|
|
50
|
+
.environmentOption()
|
|
48
51
|
.precondition(manifestDefinesTriggers(configFile))
|
|
49
|
-
.action(async (
|
|
52
|
+
.action(async ({ functionKey, site, environment, product }) => {
|
|
50
53
|
let selectedInstallationId = '';
|
|
51
|
-
if (
|
|
54
|
+
if (site && product) {
|
|
52
55
|
ui.info(cli_shared_1.Text.webtrigger.overviewFuncKey);
|
|
53
|
-
|
|
56
|
+
const installation = await installationsService.findOnlyMatchingInstallation({
|
|
57
|
+
site,
|
|
58
|
+
environment,
|
|
59
|
+
product
|
|
60
|
+
});
|
|
61
|
+
selectedInstallationId = (0, installation_helper_1.validateInstallationId)(installation?.id);
|
|
54
62
|
}
|
|
55
63
|
else {
|
|
56
64
|
const appInstallation = await installationsService.listNonTechnicalAppInstallations();
|
|
@@ -6,7 +6,7 @@ export declare class DeployView {
|
|
|
6
6
|
constructor(ui: UI);
|
|
7
7
|
getLogger(): UI;
|
|
8
8
|
displayStart(environment: string, environmentType: AppEnvironmentType): void;
|
|
9
|
-
|
|
9
|
+
displayHasNoAppInstallationsForEnvError(): void;
|
|
10
10
|
displayLintRunning(): void;
|
|
11
11
|
displayOutdatedInstallationsMessage(): void;
|
|
12
12
|
displayRoaEligibilityFailureMessage(appVersion: string, envKey: string, envType: AppEnvironmentType): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/deploy-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAkB,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAE5B,SAAS,IAAI,EAAE;IAIf,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAI5E,
|
|
1
|
+
{"version":3,"file":"deploy-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/deploy-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAkB,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAE5B,SAAS,IAAI,EAAE;IAIf,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAI5E,uCAAuC,IAAI,IAAI;IAI/C,kBAAkB,IAAI,IAAI;IAI1B,mCAAmC,IAAI,IAAI;IAK3C,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK1G,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKjD,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAKlD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3C,qBAAqB,IAAI,IAAI;IAI7B,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAInG,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzD,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjF,0CAA0C,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAIrF,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM5D,wCAAwC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5D,wCAAwC,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,kCAAkC,IAAI,OAAO,CAAC,OAAO,CAAC;IAItD,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAM7C,yCAAyC,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnE,0CAA0C,IAAI,IAAI;IAKlD,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAMlD,wBAAwB,CACnC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,qBAAqB,EACxE,wBAAwB,EAAE,OAAO,EACjC,cAAc,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC9C,OAAO,CAAC,gBAAgB,CAAC;CAY7B"}
|
|
@@ -15,8 +15,8 @@ class DeployView {
|
|
|
15
15
|
displayStart(environment, environmentType) {
|
|
16
16
|
this.ui.info(cli_shared_1.Text.deploy.cmd.start1(environment, environmentType));
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
this.ui.info(cli_shared_1.Text.deploy.
|
|
18
|
+
displayHasNoAppInstallationsForEnvError() {
|
|
19
|
+
this.ui.info(cli_shared_1.Text.deploy.hasNoAppInstallationsForEnv.hasNoAppInstallationsForEnvError);
|
|
20
20
|
}
|
|
21
21
|
displayLintRunning() {
|
|
22
22
|
this.ui.info(cli_shared_1.Text.lint.running);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AppEnvironmentType, UI } from '@forge/cli-shared';
|
|
2
|
+
import { VersionDetails, VersionOverview } from '../../service/version-service';
|
|
3
|
+
import { Change } from 'diff';
|
|
4
|
+
export declare class VersionView {
|
|
5
|
+
private readonly ui;
|
|
6
|
+
constructor(ui: UI);
|
|
7
|
+
displayDetailsProgress(progress: () => Promise<VersionDetails>): Promise<VersionDetails>;
|
|
8
|
+
displayDiffProgress(progress: () => Promise<VersionDetails[]>): Promise<VersionDetails[]>;
|
|
9
|
+
displayListProgress(progress: () => Promise<VersionOverview[]>): Promise<VersionOverview[]>;
|
|
10
|
+
promptVersionDetailsProperties(): Promise<(keyof VersionDetails)[]>;
|
|
11
|
+
displayVersionDetailsBanner(appVersion: number, envKey: string, envType: AppEnvironmentType): void;
|
|
12
|
+
displayDetailsAsTable(details: Partial<VersionDetails>): void;
|
|
13
|
+
displayDataInJson(data: VersionDetails): void;
|
|
14
|
+
displayDiffBanner(version1: number, version2: number, envKey: string, envType: AppEnvironmentType): void;
|
|
15
|
+
displayDiffAsTable(versions: {
|
|
16
|
+
v1: number;
|
|
17
|
+
v2: number;
|
|
18
|
+
}, input: {
|
|
19
|
+
key: string;
|
|
20
|
+
diff: Change[];
|
|
21
|
+
}[]): void;
|
|
22
|
+
displayListBanner(versions: number, envKey: string, envType: AppEnvironmentType): void;
|
|
23
|
+
displayWriteToFile(outFile: string): void;
|
|
24
|
+
displayVersionList(data: VersionOverview[]): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=version-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/version-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAQ,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAEtB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAIxF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIzF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAI3F,8BAA8B,IAAI,OAAO,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,CAAC;IAmDzE,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMlG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAuE7D,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMxG,kBAAkB,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,GAAG,IAAI;IAkCxG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMtF,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzC,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI;CAwBzD"}
|