|
8 | 8 | import * as os from 'os';
|
9 | 9 | import { flags, FlagsConfig, SfdxCommand } from '@salesforce/command';
|
10 | 10 | import { Duration } from '@salesforce/kit';
|
11 |
| -import { Messages } from '@salesforce/core'; |
| 11 | +import { Lifecycle, Messages, SfProject } from '@salesforce/core'; |
| 12 | +import { |
| 13 | + convertCamelCaseStringToSentence, |
| 14 | + INSTALL_URL_BASE, |
| 15 | + Package, |
| 16 | + PackageVersionCreateEventData, |
| 17 | + PackageVersionCreateRequestResult, |
| 18 | + PackagingSObjects, |
| 19 | +} from '@salesforce/packaging'; |
| 20 | +import Package2VersionStatus = PackagingSObjects.Package2VersionStatus; |
12 | 21 |
|
13 | 22 | Messages.importMessagesDirectory(__dirname);
|
14 | 23 | const messages = Messages.loadMessages('@salesforce/plugin-packaging', 'package_convert');
|
| 24 | +const pvcMessages = Messages.loadMessages('@salesforce/plugin-packaging', 'package_version_create'); |
15 | 25 |
|
16 | 26 | export class PackageConvert extends SfdxCommand {
|
17 | 27 | public static readonly description = messages.getMessage('cliDescription');
|
@@ -52,8 +62,52 @@ export class PackageConvert extends SfdxCommand {
|
52 | 62 | }),
|
53 | 63 | };
|
54 | 64 |
|
55 |
| - // eslint-disable-next-line @typescript-eslint/require-await |
56 |
| - public async run(): Promise<unknown> { |
57 |
| - throw new Error('Beta command not yet implemented'); |
| 65 | + public async run(): Promise<PackageVersionCreateRequestResult> { |
| 66 | + // eslint-disable-next-line @typescript-eslint/require-await |
| 67 | + Lifecycle.getInstance().on(Package2VersionStatus.inProgress, async (data: PackageVersionCreateEventData) => { |
| 68 | + this.ux.log( |
| 69 | + `Request in progress. Sleeping 30 seconds. Will wait a total of ${ |
| 70 | + data.timeRemaining.seconds |
| 71 | + } more seconds before timing out. Current Status='${convertCamelCaseStringToSentence( |
| 72 | + data.packageVersionCreateRequestResult.Status |
| 73 | + )}'` |
| 74 | + ); |
| 75 | + }); |
| 76 | + |
| 77 | + // eslint-disable-next-line @typescript-eslint/require-await |
| 78 | + Lifecycle.getInstance().on(Package2VersionStatus.success, async () => { |
| 79 | + this.ux.log('SUCCESS'); |
| 80 | + }); |
| 81 | + |
| 82 | + const pkg = new Package({ connection: this.hubOrg.getConnection() }); |
| 83 | + const result = await pkg.convert( |
| 84 | + this.flags.package, |
| 85 | + { |
| 86 | + wait: this.flags.wait as Duration, |
| 87 | + installationKey: this.flags.installationkey as string, |
| 88 | + installationKeyBypass: this.flags.installationkeybypass as boolean, |
| 89 | + buildInstance: this.flags.buildinstance as string, |
| 90 | + }, |
| 91 | + SfProject.getInstance() |
| 92 | + ); |
| 93 | + |
| 94 | + switch (result.Status) { |
| 95 | + case 'Error': |
| 96 | + throw result.Error.length > 0 ? result.Error.join('\n') : pvcMessages.getMessage('unknownError'); |
| 97 | + case 'Success': |
| 98 | + this.ux.log( |
| 99 | + pvcMessages.getMessage(result.Status, [ |
| 100 | + result.Id, |
| 101 | + result.SubscriberPackageVersionId, |
| 102 | + INSTALL_URL_BASE.toString(), |
| 103 | + result.SubscriberPackageVersionId, |
| 104 | + ]) |
| 105 | + ); |
| 106 | + break; |
| 107 | + default: |
| 108 | + this.ux.log(pvcMessages.getMessage('InProgress', [convertCamelCaseStringToSentence(result.Status), result.Id])); |
| 109 | + } |
| 110 | + |
| 111 | + return result; |
58 | 112 | }
|
59 | 113 | }
|
0 commit comments