@salesforce/plugin-data-seeding 1.1.3

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.
Files changed (41) hide show
  1. package/LICENSE.txt +12 -0
  2. package/README.md +294 -0
  3. package/lib/commands/data-seeding/generate/index.d.ts +16 -0
  4. package/lib/commands/data-seeding/generate/index.js +146 -0
  5. package/lib/commands/data-seeding/generate/index.js.map +1 -0
  6. package/lib/commands/data-seeding/generate/report.d.ts +12 -0
  7. package/lib/commands/data-seeding/generate/report.js +70 -0
  8. package/lib/commands/data-seeding/generate/report.js.map +1 -0
  9. package/lib/commands/data-seeding/migrate/index.d.ts +16 -0
  10. package/lib/commands/data-seeding/migrate/index.js +146 -0
  11. package/lib/commands/data-seeding/migrate/index.js.map +1 -0
  12. package/lib/commands/data-seeding/migrate/report.d.ts +12 -0
  13. package/lib/commands/data-seeding/migrate/report.js +68 -0
  14. package/lib/commands/data-seeding/migrate/report.js.map +1 -0
  15. package/lib/index.d.ts +2 -0
  16. package/lib/index.js +8 -0
  17. package/lib/index.js.map +1 -0
  18. package/lib/utils/api.d.ts +22 -0
  19. package/lib/utils/api.js +84 -0
  20. package/lib/utils/api.js.map +1 -0
  21. package/lib/utils/cache.d.ts +20 -0
  22. package/lib/utils/cache.js +65 -0
  23. package/lib/utils/cache.js.map +1 -0
  24. package/lib/utils/mso.d.ts +15 -0
  25. package/lib/utils/mso.js +112 -0
  26. package/lib/utils/mso.js.map +1 -0
  27. package/lib/utils/types.d.ts +16 -0
  28. package/lib/utils/types.js +8 -0
  29. package/lib/utils/types.js.map +1 -0
  30. package/messages/data-seeding.generate.md +47 -0
  31. package/messages/data-seeding.generate.report.md +25 -0
  32. package/messages/data-seeding.migrate.md +47 -0
  33. package/messages/data-seeding.migrate.report.md +25 -0
  34. package/npm-shrinkwrap.json +14467 -0
  35. package/oclif.lock +7962 -0
  36. package/oclif.manifest.json +337 -0
  37. package/package.json +216 -0
  38. package/schemas/data__seeding-generate-report.json +32 -0
  39. package/schemas/data__seeding-generate.json +38 -0
  40. package/schemas/data__seeding-migrate-report.json +32 -0
  41. package/schemas/data__seeding-migrate.json +38 -0
@@ -0,0 +1,146 @@
1
+ /*
2
+ * Copyright (c) 2023, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
8
+ import { Duration } from '@salesforce/kit';
9
+ import { Messages, PollingClient, SfError } from '@salesforce/core';
10
+ import { initiateDataSeed, pollSeedStatus, initiateJWTMint } from '../../../utils/api.js';
11
+ import { getSeedMigrateMso, getSeedMigrateStage as getStage } from '../../../utils/mso.js';
12
+ import { MigrateRequestCache } from '../../../utils/cache.js';
13
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
14
+ const messages = Messages.loadMessages('@salesforce/plugin-data-seeding', 'data-seeding.migrate');
15
+ export default class DataSeedingMigrate extends SfCommand {
16
+ static summary = messages.getMessage('summary');
17
+ static description = messages.getMessage('description');
18
+ static examples = messages.getMessages('examples');
19
+ static flags = {
20
+ // TODO: The org flags will need to use Flags.requiredOrg() once auth is finalized
21
+ 'target-org': Flags.requiredOrg({
22
+ summary: messages.getMessage('flags.target-org.summary'),
23
+ char: 'o',
24
+ required: true,
25
+ }),
26
+ 'source-org': Flags.requiredOrg({
27
+ summary: messages.getMessage('flags.source-org.summary'),
28
+ char: 's',
29
+ required: true,
30
+ }),
31
+ 'config-file': Flags.file({
32
+ summary: messages.getMessage('flags.config-file.summary'),
33
+ char: 'f',
34
+ required: true,
35
+ exists: true,
36
+ }),
37
+ wait: Flags.duration({
38
+ summary: messages.getMessage('flags.wait.summary'),
39
+ char: 'w',
40
+ unit: 'minutes',
41
+ defaultValue: 33,
42
+ min: 1,
43
+ exclusive: ['async'],
44
+ }),
45
+ async: Flags.boolean({
46
+ summary: messages.getMessage('flags.async.summary'),
47
+ exclusive: ['wait'],
48
+ }),
49
+ };
50
+ async run() {
51
+ const { flags } = await this.parse(DataSeedingMigrate);
52
+ const { async, 'config-file': configFile, 'source-org': sourceOrgObj, 'target-org': targetOrgObj, wait } = flags;
53
+ const sourceOrg = sourceOrgObj.getOrgId();
54
+ const srcAccessToken = sourceOrgObj.getConnection().accessToken;
55
+ const srcOrgInstUrl = sourceOrgObj.getConnection().instanceUrl;
56
+ const targetOrg = targetOrgObj.getOrgId();
57
+ const tgtAccessToken = targetOrgObj.getConnection().accessToken;
58
+ const tgtOrgInstUrl = targetOrgObj.getConnection().instanceUrl;
59
+ // Fetch Valid JWT with Data Seed Org Perm
60
+ const { jwt: jwtValue } = await initiateJWTMint(srcOrgInstUrl, srcAccessToken, tgtOrgInstUrl, tgtAccessToken);
61
+ const { request_id: jobId } = await initiateDataSeed(configFile, 'data-copy', jwtValue, srcOrgInstUrl, srcAccessToken, tgtOrgInstUrl, tgtAccessToken, sourceOrg);
62
+ if (!jobId)
63
+ throw new Error('Failed to receive job id');
64
+ const reportMessage = messages.getMessage('report.suggestion', [jobId]);
65
+ await (await MigrateRequestCache.create()).createCacheEntry(jobId);
66
+ const baseData = { jobId, sourceOrg, targetOrg };
67
+ const buildResponse = (response) => ({
68
+ dataSeedingJob: 'migrate',
69
+ startTime: response?.execution_start_time,
70
+ endTime: response?.execution_end_time,
71
+ status: response.status,
72
+ ...baseData,
73
+ });
74
+ if (wait && !async) {
75
+ const mso = getSeedMigrateMso({ jsonEnabled: this.jsonEnabled() });
76
+ mso.updateData(baseData);
77
+ const completedStatus = ['Completed', 'Partially Completed', 'Failed'];
78
+ const options = {
79
+ poll: async () => {
80
+ const { jwt: jwtValueNew } = await initiateJWTMint(srcOrgInstUrl, srcAccessToken, tgtOrgInstUrl, tgtAccessToken);
81
+ const response = await pollSeedStatus(jobId, jwtValueNew);
82
+ mso.goto(getStage(response.step), {
83
+ startTime: response.execution_start_time,
84
+ endTime: response.execution_end_time,
85
+ status: response.status,
86
+ });
87
+ return {
88
+ completed: completedStatus.includes(response.status),
89
+ payload: response,
90
+ };
91
+ },
92
+ frequency: Duration.seconds(1),
93
+ timeout: wait,
94
+ };
95
+ try {
96
+ const client = await PollingClient.create(options);
97
+ const pollResult = await client.subscribe();
98
+ switch (pollResult.status) {
99
+ case 'Completed':
100
+ mso.stop();
101
+ break;
102
+ case 'Failed':
103
+ mso.error();
104
+ throw new SfError(`Data migration job failed on step: ${pollResult.step}\nLog Text: ${pollResult.log_text}`);
105
+ case 'Partially Completed':
106
+ mso.stop('warning');
107
+ this.log(`Process partially completed: ${pollResult.log_text}`);
108
+ break;
109
+ default:
110
+ mso.stop('current');
111
+ }
112
+ return buildResponse(pollResult);
113
+ }
114
+ catch (e) {
115
+ const err = SfError.wrap(e);
116
+ if (err.message.includes('The client has timed out')) {
117
+ mso.updateData({ status: 'Client Timeout' });
118
+ err.actions = [reportMessage];
119
+ mso.stop('current');
120
+ }
121
+ else {
122
+ mso.error();
123
+ }
124
+ throw err;
125
+ }
126
+ }
127
+ else {
128
+ const { jwt: jwtValueNew } = await initiateJWTMint(srcOrgInstUrl, srcAccessToken, tgtOrgInstUrl, tgtAccessToken);
129
+ const response = await pollSeedStatus(jobId, jwtValueNew);
130
+ const mso = getSeedMigrateMso({
131
+ jsonEnabled: this.jsonEnabled(),
132
+ showElapsedTime: false,
133
+ showStageTime: false,
134
+ });
135
+ mso.goto(getStage(response.step), {
136
+ ...baseData,
137
+ startTime: response.execution_start_time,
138
+ status: 'Initiated',
139
+ });
140
+ mso.stop('async');
141
+ this.log(reportMessage);
142
+ return buildResponse(response);
143
+ }
144
+ }
145
+ }
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/data-seeding/migrate/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { DataSeedingReportResult } from '../../../utils/types.js';
3
+ export default class DataSeedingMigrateReport extends SfCommand<DataSeedingReportResult> {
4
+ static readonly summary: string;
5
+ static readonly description: string;
6
+ static readonly examples: string[];
7
+ static readonly flags: {
8
+ 'job-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'use-most-recent': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<DataSeedingReportResult>;
12
+ }
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright (c) 2023, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
8
+ import { Messages, SfError } from '@salesforce/core';
9
+ import { pollSeedStatus } from '../../../utils/api.js';
10
+ import { getSeedMigrateMso, getSeedMigrateStage as getStage } from '../../../utils/mso.js';
11
+ import { MigrateRequestCache } from '../../../utils/cache.js';
12
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
13
+ const messages = Messages.loadMessages('@salesforce/plugin-data-seeding', 'data-seeding.migrate.report');
14
+ export default class DataSeedingMigrateReport extends SfCommand {
15
+ static summary = messages.getMessage('summary');
16
+ static description = messages.getMessage('description');
17
+ static examples = messages.getMessages('examples');
18
+ static flags = {
19
+ 'job-id': Flags.string({
20
+ summary: messages.getMessage('flags.job-id.summary'),
21
+ char: 'i',
22
+ exactlyOne: ['job-id', 'use-most-recent'],
23
+ }),
24
+ 'use-most-recent': Flags.boolean({
25
+ summary: messages.getMessage('flags.use-most-recent.summary'),
26
+ char: 'r',
27
+ exactlyOne: ['job-id', 'use-most-recent'],
28
+ }),
29
+ };
30
+ async run() {
31
+ const { flags } = await this.parse(DataSeedingMigrateReport);
32
+ const jobId = flags['job-id'] ?? (await MigrateRequestCache.create()).resolveFromCache().jobId;
33
+ if (!jobId)
34
+ throw new SfError('No job ID provided or found in cache');
35
+ const response = await pollSeedStatus(jobId, '');
36
+ const data = {
37
+ jobId,
38
+ startTime: response.execution_start_time,
39
+ endTime: response.execution_end_time,
40
+ status: response.status,
41
+ };
42
+ const mso = getSeedMigrateMso({
43
+ jsonEnabled: this.jsonEnabled(),
44
+ showElapsedTime: false,
45
+ showStageTime: false,
46
+ });
47
+ mso.goto(getStage(response.step), data);
48
+ switch (response.status) {
49
+ case 'In Progress':
50
+ mso.stop('current');
51
+ break;
52
+ case 'Partially Completed':
53
+ mso.stop('warning');
54
+ this.log(`Process partially completed: ${response.log_text}`);
55
+ break;
56
+ case 'Failed':
57
+ mso.error();
58
+ throw new SfError(`Failed on step: ${response.step}\nLog Text: ${response.log_text}`);
59
+ default:
60
+ mso.stop();
61
+ }
62
+ return {
63
+ dataSeedingJob: 'migrate',
64
+ ...data,
65
+ };
66
+ }
67
+ }
68
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../../src/commands/data-seeding/migrate/report.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
package/lib/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2021, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ export default {};
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type SeedResponse = {
2
+ request_id: string;
3
+ };
4
+ export type ServletResponse = {
5
+ jwt: string;
6
+ };
7
+ export type AuthServletResponse = {
8
+ statusCode: string;
9
+ body: string;
10
+ };
11
+ export type PollSeedResponse = {
12
+ execution_end_time: string;
13
+ execution_start_time: string;
14
+ log_text: string;
15
+ request_id: string;
16
+ status: string;
17
+ step: string;
18
+ };
19
+ export type DataSeedingOperation = 'data-generation' | 'data-copy';
20
+ export declare const initiateDataSeed: (config: string, operation: DataSeedingOperation, jwt: string, srcOrgUrl: string, srcAccessToken: string, tgtOrgUrl: string, tgtAccessToken: string, srcOrgId: string) => Promise<SeedResponse>;
21
+ export declare const initiateJWTMint: (srcOrgUrl: string, srcAccessToken: string, tgtOrgUrl: string, tgtAccessToken: string) => Promise<ServletResponse>;
22
+ export declare const pollSeedStatus: (jobId: string, jwt: string) => Promise<PollSeedResponse>;
@@ -0,0 +1,84 @@
1
+ /*
2
+ * Copyright (c) 2024, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ import fs from 'node:fs';
8
+ import got from 'got';
9
+ import FormData from 'form-data';
10
+ import { SfError, Logger } from '@salesforce/core';
11
+ const baseUrl = 'https://api.salesforce.com/platform/data-seed/v1';
12
+ const seedUrl = `${baseUrl}/data-seed`;
13
+ const pollUrl = `${baseUrl}/status`;
14
+ const sfRegion = 'us-east-1';
15
+ export const initiateDataSeed = async (config, operation, jwt, srcOrgUrl, srcAccessToken, tgtOrgUrl, tgtAccessToken, srcOrgId) => {
16
+ const form = new FormData();
17
+ form.append('config_file', fs.createReadStream(config));
18
+ form.append('operation', operation);
19
+ form.append('source_access_token', srcAccessToken);
20
+ form.append('source_instance_url', srcOrgUrl);
21
+ form.append('target_access_token', tgtAccessToken);
22
+ form.append('target_instance_url', tgtOrgUrl);
23
+ form.append('source_org_id', srcOrgId);
24
+ // TODO: Update to use .json() instead of JSON.parse once the Error response is changed to be JSON
25
+ // Update the return type as well
26
+ const response = await got.post(seedUrl, {
27
+ throwHttpErrors: false,
28
+ headers: {
29
+ ...form.getHeaders(),
30
+ Authorization: `Bearer ${jwt}`,
31
+ 'x-salesforce-region': sfRegion,
32
+ },
33
+ body: form,
34
+ });
35
+ if (response.statusCode !== 200) {
36
+ throw new SfError(`Failed to initiate data-seeding operation (${operation}). Response:\n${response.body}`);
37
+ }
38
+ return JSON.parse(response.body);
39
+ };
40
+ export const initiateJWTMint = async (srcOrgUrl, srcAccessToken, tgtOrgUrl, tgtAccessToken) => {
41
+ const srcServletUrl = `${srcOrgUrl}/dataseed/auth`;
42
+ const tgtServletUrl = `${tgtOrgUrl}/dataseed/auth`;
43
+ const [responseSrc, responseTgt] = await Promise.all([
44
+ callAuthServlet(srcServletUrl, srcAccessToken),
45
+ callAuthServlet(tgtServletUrl, tgtAccessToken),
46
+ ]);
47
+ if (responseSrc.statusCode === '200') {
48
+ return JSON.parse(responseSrc.body);
49
+ }
50
+ if (responseTgt.statusCode === '200') {
51
+ return JSON.parse(responseTgt.body);
52
+ }
53
+ throw new SfError(`Org permission for data seed not found in either the source or target org.\nSource Response: Error Code : ${responseSrc.statusCode} - ${responseSrc.body}. \nTarget Response: Error Code : ${responseTgt.statusCode} - ${responseTgt.body}`);
54
+ };
55
+ const callAuthServlet = async (url, accessToken) => {
56
+ const response = await got.post(url, {
57
+ throwHttpErrors: false,
58
+ headers: {
59
+ Authorization: `Bearer ${accessToken}`,
60
+ },
61
+ });
62
+ return {
63
+ statusCode: response.statusCode.toString(), // Convert to string
64
+ body: response.body,
65
+ };
66
+ };
67
+ export const pollSeedStatus = async (jobId, jwt) => {
68
+ const logger = await Logger.child('PollSeedStatus');
69
+ // TODO: Update to use .json() instead of JSON.parse once the Error response is changed to be JSON
70
+ // Update the return type as well
71
+ const headers = {
72
+ Authorization: `Bearer ${jwt}`,
73
+ 'x-salesforce-region': sfRegion,
74
+ };
75
+ const response = await got.get(`${pollUrl}/${jobId}`, { throwHttpErrors: false, headers });
76
+ if (response.statusCode !== 200) {
77
+ // TODO: Print error body once the Error response is changed to be JSON
78
+ throw new SfError(`Failed to poll data seeding status for ${jobId}`);
79
+ }
80
+ const json = JSON.parse(response.body);
81
+ logger.debug(json);
82
+ return json;
83
+ };
84
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TTLConfig } from '@salesforce/core';
2
+ export type SeedingOptions = {
3
+ jobId: string;
4
+ };
5
+ export type SeedingCacheConfig = {
6
+ jobId: string;
7
+ };
8
+ export declare abstract class DataSeedingRequestCache extends TTLConfig<TTLConfig.Options, SeedingCacheConfig> {
9
+ static getDefaultOptions(): TTLConfig.Options;
10
+ createCacheEntry(jobId: string): Promise<void>;
11
+ resolveFromCache(): SeedingOptions;
12
+ }
13
+ export declare class GenerateRequestCache extends DataSeedingRequestCache {
14
+ static getDefaultOptions(): TTLConfig.Options;
15
+ static unset(key: string): Promise<void>;
16
+ }
17
+ export declare class MigrateRequestCache extends DataSeedingRequestCache {
18
+ static getDefaultOptions(): TTLConfig.Options;
19
+ static unset(key: string): Promise<void>;
20
+ }
@@ -0,0 +1,65 @@
1
+ /*
2
+ * Copyright (c) 2023, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ import { TTLConfig, Global, SfError } from '@salesforce/core';
8
+ import { Duration } from '@salesforce/kit';
9
+ export class DataSeedingRequestCache extends TTLConfig {
10
+ static getDefaultOptions() {
11
+ return {
12
+ isGlobal: true,
13
+ isState: true,
14
+ filename: DataSeedingRequestCache.getFileName(),
15
+ stateFolder: Global.SF_STATE_FOLDER,
16
+ ttl: Duration.days(14),
17
+ };
18
+ }
19
+ async createCacheEntry(jobId) {
20
+ if (!jobId)
21
+ throw new SfError('Job ID is required to create a cache entry');
22
+ this.set(jobId, { jobId });
23
+ await this.write();
24
+ }
25
+ resolveFromCache() {
26
+ const key = this.getLatestKey();
27
+ if (!key)
28
+ throw new SfError('Could not find a job ID to resume');
29
+ const { jobId } = this.get(key);
30
+ return { jobId };
31
+ }
32
+ }
33
+ export class GenerateRequestCache extends DataSeedingRequestCache {
34
+ static getDefaultOptions() {
35
+ return {
36
+ isGlobal: true,
37
+ isState: true,
38
+ filename: 'data-seeding-generate-request-cache.json',
39
+ stateFolder: Global.SF_STATE_FOLDER,
40
+ ttl: Duration.days(14),
41
+ };
42
+ }
43
+ static async unset(key) {
44
+ const cache = await GenerateRequestCache.create();
45
+ cache.unset(key);
46
+ await cache.write();
47
+ }
48
+ }
49
+ export class MigrateRequestCache extends DataSeedingRequestCache {
50
+ static getDefaultOptions() {
51
+ return {
52
+ isGlobal: true,
53
+ isState: true,
54
+ filename: 'data-seeding-migrate-request-cache.json',
55
+ stateFolder: Global.SF_STATE_FOLDER,
56
+ ttl: Duration.days(14),
57
+ };
58
+ }
59
+ static async unset(key) {
60
+ const cache = await MigrateRequestCache.create();
61
+ cache.unset(key);
62
+ await cache.write();
63
+ }
64
+ }
65
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAU3C,MAAM,OAAgB,uBAAwB,SAAQ,SAAgD;IAC7F,MAAM,CAAC,iBAAiB;QAC7B,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,uBAAuB,CAAC,WAAW,EAAE;YAC/C,WAAW,EAAE,MAAM,CAAC,eAAe;YACnC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,KAAa;QACzC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,OAAO,CAAC,4CAA4C,CAAC,CAAC;QAE5E,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEM,gBAAgB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAEjE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,uBAAuB;IACxD,MAAM,CAAC,iBAAiB;QAC7B,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,0CAA0C;YACpD,WAAW,EAAE,MAAM,CAAC,eAAe;YACnC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAW;QACnC,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,CAAC;QAClD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;IACvD,MAAM,CAAC,iBAAiB;QAC7B,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,yCAAyC;YACnD,WAAW,EAAE,MAAM,CAAC,eAAe;YACnC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAW;QACnC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAC;QACjD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { MultiStageOutput, MultiStageOutputOptions } from '@oclif/multi-stage-output';
2
+ type SeedGenerateMsoData = {
3
+ jobId: string;
4
+ startTime?: string;
5
+ endTime?: string;
6
+ sourceOrg?: string;
7
+ targetOrg?: string;
8
+ status?: string;
9
+ };
10
+ type SeedMsoOverrides = Partial<MultiStageOutputOptions<SeedGenerateMsoData>>;
11
+ export declare const getSeedGenerateStage: (step: string) => string;
12
+ export declare const getSeedGenerateMso: (overrides?: SeedMsoOverrides) => MultiStageOutput<SeedGenerateMsoData>;
13
+ export declare const getSeedMigrateStage: (step: string) => string;
14
+ export declare const getSeedMigrateMso: (overrides?: SeedMsoOverrides) => MultiStageOutput<SeedGenerateMsoData>;
15
+ export {};
@@ -0,0 +1,112 @@
1
+ /*
2
+ * Copyright (c) 2024, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ import { MultiStageOutput } from '@oclif/multi-stage-output';
8
+ import { StandardColors } from '@salesforce/sf-plugins-core';
9
+ import { SfError } from '@salesforce/core';
10
+ /* Data Seed Generation */
11
+ // The keys in this Map are steps returned by the server
12
+ // - They have been converted to lowercase for later comparison
13
+ // The values in this Map are used as the stage names in mso
14
+ const seedGenerateStagesMap = new Map([
15
+ ['init', 'Initializing'],
16
+ ['querying source org', 'Querying Source Org'],
17
+ ['data generation', 'Data Generation'],
18
+ ['populating target org', 'Populating Target Org'],
19
+ ['pipeline finished', 'Finalizing'],
20
+ ]);
21
+ export const getSeedGenerateStage = (step) => {
22
+ const stage = seedGenerateStagesMap.get(step.toLowerCase());
23
+ if (!stage)
24
+ throw new SfError(`Unable to map step (${step}) from server to multi-stage-output stage`);
25
+ return stage;
26
+ };
27
+ export const getSeedGenerateMso = (overrides = {}) => {
28
+ const defaults = {
29
+ title: 'Data Seed Generation',
30
+ stages: Array.from(seedGenerateStagesMap.values()),
31
+ ...overrides,
32
+ };
33
+ return getSeedMso(defaults);
34
+ };
35
+ /* Data Seed Migration */
36
+ const seedMigrateStagesMap = new Map([
37
+ ['querying source org', 'Querying Source Org'],
38
+ ['populating target org', 'Populating Target Org'],
39
+ ['pipeline finished', 'Finalizing'],
40
+ ]);
41
+ export const getSeedMigrateStage = (step) => {
42
+ const stage = seedMigrateStagesMap.get(step.toLowerCase());
43
+ if (!stage)
44
+ throw new SfError(`Unable to map step (${step}) from server to multi-stage-output stage`);
45
+ return stage;
46
+ };
47
+ export const getSeedMigrateMso = (overrides = {}) => {
48
+ const defaults = {
49
+ title: 'Data Seed Migration',
50
+ stages: Array.from(seedMigrateStagesMap.values()),
51
+ ...overrides,
52
+ };
53
+ return getSeedMso(defaults);
54
+ };
55
+ /* Shared MSO config */
56
+ const getSeedMso = (overrides = {}) => new MultiStageOutput({
57
+ preStagesBlock: [
58
+ {
59
+ get: (data) => data?.jobId,
60
+ type: 'static-key-value',
61
+ label: 'Job ID',
62
+ neverCollapse: true,
63
+ },
64
+ {
65
+ get: (data) => data?.sourceOrg,
66
+ type: 'static-key-value',
67
+ label: 'Source Org',
68
+ },
69
+ {
70
+ get: (data) => data?.targetOrg,
71
+ type: 'static-key-value',
72
+ label: 'Target Org',
73
+ },
74
+ ],
75
+ postStagesBlock: [
76
+ {
77
+ get: (data) => {
78
+ const status = data?.status;
79
+ switch (status) {
80
+ case 'Completed':
81
+ case 'Initiated':
82
+ return StandardColors.success(status);
83
+ case 'Client Timeout':
84
+ case 'Partially Completed':
85
+ return StandardColors.warning(status);
86
+ case 'Failed':
87
+ return StandardColors.error(status);
88
+ default:
89
+ return status;
90
+ }
91
+ },
92
+ type: 'static-key-value',
93
+ label: 'Status',
94
+ neverCollapse: true,
95
+ },
96
+ {
97
+ get: (data) => data?.startTime,
98
+ type: 'static-key-value',
99
+ label: 'Start Time',
100
+ },
101
+ {
102
+ get: (data) => data?.endTime,
103
+ type: 'static-key-value',
104
+ label: 'End Time',
105
+ },
106
+ ],
107
+ jsonEnabled: false,
108
+ stages: [],
109
+ title: '',
110
+ ...overrides,
111
+ });
112
+ //# sourceMappingURL=mso.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mso.js","sourceRoot":"","sources":["../../src/utils/mso.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type DataSeedingJob = 'generate' | 'migrate';
2
+ export type DataSeedingReportResult = {
3
+ dataSeedingJob: DataSeedingJob;
4
+ jobId: string;
5
+ startTime?: string;
6
+ endTime?: string;
7
+ status?: string;
8
+ };
9
+ export type DataSeedingGenerateResult = DataSeedingReportResult & {
10
+ sourceOrg: string;
11
+ targetOrg: string;
12
+ };
13
+ export type DataSeedingMigrateResult = DataSeedingReportResult & {
14
+ sourceOrg: string;
15
+ targetOrg: string;
16
+ };
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2023, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * Licensed under the BSD 3-Clause license.
5
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}