@salesforce/plugin-devops-center 1.3.0 → 1.4.1

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 (185) hide show
  1. package/README.md +649 -102
  2. package/lib/commands/devops/pipeline/create.d.ts +2 -1
  3. package/lib/commands/devops/pipeline/create.js +37 -7
  4. package/lib/commands/devops/pipeline/create.js.map +1 -1
  5. package/lib/commands/devops/pipeline/{activate.d.ts → get.d.ts} +3 -3
  6. package/lib/commands/devops/pipeline/get.js +81 -0
  7. package/lib/commands/devops/pipeline/get.js.map +1 -0
  8. package/lib/commands/devops/pipeline/list.d.ts +13 -0
  9. package/lib/commands/devops/pipeline/list.js +58 -0
  10. package/lib/commands/devops/pipeline/list.js.map +1 -0
  11. package/lib/commands/devops/pipeline/{attach-project.d.ts → project/add.d.ts} +2 -2
  12. package/lib/commands/devops/pipeline/{attach-project.js → project/add.js} +5 -5
  13. package/lib/commands/devops/pipeline/project/add.js.map +1 -0
  14. package/lib/commands/devops/pipeline/project/delete.d.ts +15 -0
  15. package/lib/commands/devops/pipeline/{activate.js → project/delete.js} +17 -28
  16. package/lib/commands/devops/pipeline/project/delete.js.map +1 -0
  17. package/lib/commands/devops/pipeline/stage/delete.d.ts +15 -0
  18. package/lib/commands/devops/pipeline/stage/delete.js +69 -0
  19. package/lib/commands/devops/pipeline/stage/delete.js.map +1 -0
  20. package/lib/commands/devops/pipeline/update.d.ts +18 -0
  21. package/lib/commands/devops/pipeline/update.js +126 -0
  22. package/lib/commands/devops/pipeline/update.js.map +1 -0
  23. package/lib/commands/devops/project/update.d.ts +17 -0
  24. package/lib/commands/devops/project/update.js +86 -0
  25. package/lib/commands/devops/project/update.js.map +1 -0
  26. package/lib/commands/devops/promote.d.ts +24 -0
  27. package/lib/commands/devops/promote.js +148 -0
  28. package/lib/commands/devops/promote.js.map +1 -0
  29. package/lib/commands/devops/promotion/complete.d.ts +20 -0
  30. package/lib/commands/devops/promotion/complete.js +112 -0
  31. package/lib/commands/devops/promotion/complete.js.map +1 -0
  32. package/lib/commands/devops/request/status.d.ts +14 -0
  33. package/lib/commands/devops/request/status.js +71 -0
  34. package/lib/commands/devops/request/status.js.map +1 -0
  35. package/lib/commands/devops/{pull-request → review}/create.d.ts +1 -3
  36. package/lib/commands/devops/{pull-request → review}/create.js +11 -43
  37. package/lib/commands/devops/review/create.js.map +1 -0
  38. package/lib/commands/devops/stage/{add-branch.d.ts → branch/add.d.ts} +2 -2
  39. package/lib/commands/devops/stage/{add-branch.js → branch/add.js} +6 -6
  40. package/lib/commands/devops/stage/branch/add.js.map +1 -0
  41. package/lib/commands/devops/stage/{add-environment.d.ts → environment/add.d.ts} +2 -2
  42. package/lib/commands/devops/stage/{add-environment.js → environment/add.js} +13 -6
  43. package/lib/commands/devops/stage/environment/add.js.map +1 -0
  44. package/lib/commands/devops/stage/environment/delete.d.ts +15 -0
  45. package/lib/commands/devops/stage/environment/delete.js +75 -0
  46. package/lib/commands/devops/stage/environment/delete.js.map +1 -0
  47. package/lib/commands/devops/work-item/combine.d.ts +15 -0
  48. package/lib/commands/devops/work-item/combine.js +109 -0
  49. package/lib/commands/devops/work-item/combine.js.map +1 -0
  50. package/lib/commands/devops/work-item/prepare.d.ts +14 -0
  51. package/lib/commands/devops/work-item/prepare.js +98 -0
  52. package/lib/commands/devops/work-item/prepare.js.map +1 -0
  53. package/lib/commands/devops/work-item/{status/update.d.ts → update.d.ts} +6 -4
  54. package/lib/commands/devops/work-item/{status/update.js → update.js} +30 -9
  55. package/lib/commands/devops/work-item/update.js.map +1 -0
  56. package/lib/common/flags/promote/promoteFlags.d.ts +1 -0
  57. package/lib/common/flags/promote/promoteFlags.js +5 -0
  58. package/lib/common/flags/promote/promoteFlags.js.map +1 -1
  59. package/lib/common/outputService/aorOutputService.js +4 -4
  60. package/lib/common/outputService/aorOutputService.js.map +1 -1
  61. package/lib/common/outputService/outputUtils.js +1 -2
  62. package/lib/common/outputService/outputUtils.js.map +1 -1
  63. package/lib/common/selectors/asyncOperationResultsSelector.js +3 -1
  64. package/lib/common/selectors/asyncOperationResultsSelector.js.map +1 -1
  65. package/lib/common/selectors/deployComponentsSelector.js +5 -6
  66. package/lib/common/selectors/deployComponentsSelector.js.map +1 -1
  67. package/lib/common/selectors/deployProgressSummarySelector.js +3 -1
  68. package/lib/common/selectors/deployProgressSummarySelector.js.map +1 -1
  69. package/lib/common/selectors/deploymentResultsSelector.js +10 -6
  70. package/lib/common/selectors/deploymentResultsSelector.js.map +1 -1
  71. package/lib/common/selectors/environmentSelector.js +4 -2
  72. package/lib/common/selectors/environmentSelector.js.map +1 -1
  73. package/lib/common/selectors/namedCredentialSelector.js +2 -1
  74. package/lib/common/selectors/namedCredentialSelector.js.map +1 -1
  75. package/lib/common/selectors/pipelineStageSelector.js +5 -3
  76. package/lib/common/selectors/pipelineStageSelector.js.map +1 -1
  77. package/lib/common/selectors/validateDeploySelector.js +3 -1
  78. package/lib/common/selectors/validateDeploySelector.js.map +1 -1
  79. package/lib/common/selectors/workItemSelector.js +4 -1
  80. package/lib/common/selectors/workItemSelector.js.map +1 -1
  81. package/lib/utils/activatePipeline.d.ts +13 -4
  82. package/lib/utils/activatePipeline.js +7 -6
  83. package/lib/utils/activatePipeline.js.map +1 -1
  84. package/lib/utils/attachProject.js +2 -0
  85. package/lib/utils/attachProject.js.map +1 -1
  86. package/lib/utils/combineWorkItems.d.ts +20 -0
  87. package/lib/utils/combineWorkItems.js +42 -0
  88. package/lib/utils/combineWorkItems.js.map +1 -0
  89. package/lib/utils/createPipeline.d.ts +14 -1
  90. package/lib/utils/createPipeline.js +52 -6
  91. package/lib/utils/createPipeline.js.map +1 -1
  92. package/lib/utils/createProject.js +1 -0
  93. package/lib/utils/createProject.js.map +1 -1
  94. package/lib/utils/createPullRequest.d.ts +7 -19
  95. package/lib/utils/createPullRequest.js +51 -122
  96. package/lib/utils/createPullRequest.js.map +1 -1
  97. package/lib/utils/deletePipelineStage.d.ts +12 -0
  98. package/lib/utils/deletePipelineStage.js +41 -0
  99. package/lib/utils/deletePipelineStage.js.map +1 -0
  100. package/lib/utils/deleteStageEnvironment.d.ts +8 -0
  101. package/lib/utils/deleteStageEnvironment.js +33 -0
  102. package/lib/utils/deleteStageEnvironment.js.map +1 -0
  103. package/lib/utils/deployStage.d.ts +29 -0
  104. package/lib/utils/deployStage.js +68 -0
  105. package/lib/utils/deployStage.js.map +1 -0
  106. package/lib/utils/detachProject.d.ts +8 -0
  107. package/lib/utils/detachProject.js +37 -0
  108. package/lib/utils/detachProject.js.map +1 -0
  109. package/lib/utils/getPipeline.d.ts +27 -0
  110. package/lib/utils/getPipeline.js +66 -0
  111. package/lib/utils/getPipeline.js.map +1 -0
  112. package/lib/utils/getRequestStatus.d.ts +10 -0
  113. package/lib/utils/getRequestStatus.js +32 -0
  114. package/lib/utils/getRequestStatus.js.map +1 -0
  115. package/lib/utils/listPipelines.d.ts +11 -0
  116. package/lib/utils/listPipelines.js +20 -0
  117. package/lib/utils/listPipelines.js.map +1 -0
  118. package/lib/utils/pipelineUtils.js +3 -0
  119. package/lib/utils/pipelineUtils.js.map +1 -1
  120. package/lib/utils/prepareWorkItem.d.ts +25 -0
  121. package/lib/utils/prepareWorkItem.js +55 -0
  122. package/lib/utils/prepareWorkItem.js.map +1 -0
  123. package/lib/utils/promoteStage.d.ts +21 -0
  124. package/lib/utils/promoteStage.js +46 -0
  125. package/lib/utils/promoteStage.js.map +1 -0
  126. package/lib/utils/soqlUtils.d.ts +23 -0
  127. package/lib/utils/soqlUtils.js +63 -0
  128. package/lib/utils/soqlUtils.js.map +1 -0
  129. package/lib/utils/updateProject.d.ts +17 -0
  130. package/lib/utils/updateProject.js +41 -0
  131. package/lib/utils/updateProject.js.map +1 -0
  132. package/lib/utils/{updateWorkItemStatus.d.ts → updateWorkItem.d.ts} +12 -14
  133. package/lib/utils/{updateWorkItemStatus.js → updateWorkItem.js} +31 -27
  134. package/lib/utils/updateWorkItem.js.map +1 -0
  135. package/lib/utils/workItems.js +2 -0
  136. package/lib/utils/workItems.js.map +1 -1
  137. package/messages/devops.pipeline.create.md +26 -6
  138. package/messages/devops.pipeline.get.md +17 -0
  139. package/messages/devops.pipeline.list.md +13 -0
  140. package/messages/devops.pipeline.project.delete.md +25 -0
  141. package/messages/devops.pipeline.stage.delete.md +25 -0
  142. package/messages/devops.pipeline.update.md +47 -0
  143. package/messages/devops.project.update.md +45 -0
  144. package/messages/devops.promote.md +61 -0
  145. package/messages/devops.promotion.complete.md +47 -0
  146. package/messages/devops.request.status.md +21 -0
  147. package/messages/devops.review.create.md +33 -0
  148. package/messages/{devops.stage.add-environment.md → devops.stage.environment.add.md} +4 -0
  149. package/messages/devops.stage.environment.delete.md +29 -0
  150. package/messages/devops.work-item.combine.md +39 -0
  151. package/messages/devops.work-item.prepare.md +27 -0
  152. package/messages/devops.work-item.update.md +45 -0
  153. package/npm-shrinkwrap.json +37 -174
  154. package/oclif.lock +1 -1
  155. package/oclif.manifest.json +1167 -223
  156. package/package.json +20 -8
  157. package/schemas/devops-pipeline-get.json +98 -0
  158. package/schemas/devops-pipeline-list.json +38 -0
  159. package/schemas/devops-pipeline-project-delete.json +25 -0
  160. package/schemas/devops-pipeline-stage-delete.json +25 -0
  161. package/schemas/{devops-pipeline-activate.json → devops-pipeline-update.json} +5 -2
  162. package/schemas/devops-project-update.json +31 -0
  163. package/schemas/devops-promote.json +28 -0
  164. package/schemas/devops-promotion-complete.json +34 -0
  165. package/schemas/devops-request-status.json +31 -0
  166. package/schemas/{devops-pull__request-create.json → devops-review-create.json} +0 -3
  167. package/schemas/devops-stage-environment-delete.json +25 -0
  168. package/schemas/devops-work__item-combine.json +25 -0
  169. package/schemas/devops-work__item-prepare.json +25 -0
  170. package/schemas/{devops-work__item-status-update.json → devops-work__item-update.json} +8 -2
  171. package/lib/commands/devops/pipeline/activate.js.map +0 -1
  172. package/lib/commands/devops/pipeline/attach-project.js.map +0 -1
  173. package/lib/commands/devops/pull-request/create.js.map +0 -1
  174. package/lib/commands/devops/stage/add-branch.js.map +0 -1
  175. package/lib/commands/devops/stage/add-environment.js.map +0 -1
  176. package/lib/commands/devops/work-item/status/update.js.map +0 -1
  177. package/lib/utils/updateWorkItemStatus.js.map +0 -1
  178. package/messages/devops.pipeline.activate.md +0 -29
  179. package/messages/devops.pull-request.create.md +0 -57
  180. package/messages/devops.work-item.status.update.md +0 -29
  181. /package/messages/{devops.pipeline.attach-project.md → devops.pipeline.project.add.md} +0 -0
  182. /package/messages/{devops.stage.add-branch.md → devops.stage.branch.add.md} +0 -0
  183. /package/schemas/{devops-pipeline-attach__project.json → devops-pipeline-project-add.json} +0 -0
  184. /package/schemas/{devops-stage-add__branch.json → devops-stage-branch-add.json} +0 -0
  185. /package/schemas/{devops-stage-add__environment.json → devops-stage-environment-add.json} +0 -0
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright 2026, Salesforce, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Messages } from '@salesforce/core';
17
+ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
18
+ import { prepareWorkItem, resolveProjectIdFromWorkItem, } from '../../../utils/prepareWorkItem.js';
19
+ import { getPipelineIdForProject } from '../../../utils/pipelineUtils.js';
20
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
21
+ const messages = Messages.loadMessages('@salesforce/plugin-devops-center', 'devops.work-item.prepare');
22
+ const commonErrorMessages = Messages.loadMessages('@salesforce/plugin-devops-center', 'commonErrors');
23
+ export default class DevopsWorkItemPrepare extends SfCommand {
24
+ static summary = messages.getMessage('summary');
25
+ static description = messages.getMessage('description');
26
+ static examples = messages.getMessages('examples');
27
+ static flags = {
28
+ 'target-org': Flags.requiredOrg(),
29
+ 'api-version': Flags.orgApiVersion(),
30
+ 'work-item-id': Flags.salesforceId({
31
+ summary: messages.getMessage('flags.work-item-id.summary'),
32
+ char: 'i',
33
+ required: true,
34
+ startsWith: '1fk',
35
+ }),
36
+ 'target-stage-id': Flags.salesforceId({
37
+ summary: messages.getMessage('flags.target-stage-id.summary'),
38
+ char: 't',
39
+ required: true,
40
+ startsWith: '1QV',
41
+ }),
42
+ };
43
+ async run() {
44
+ const { flags } = await this.parse(DevopsWorkItemPrepare);
45
+ const org = flags['target-org'];
46
+ const connection = org.getConnection(flags['api-version']);
47
+ const workItemId = flags['work-item-id'];
48
+ let projectId;
49
+ let sourceStageId;
50
+ try {
51
+ const workItem = await resolveProjectIdFromWorkItem(connection, workItemId);
52
+ projectId = workItem.projectId;
53
+ sourceStageId = workItem.pipelineStageId;
54
+ }
55
+ catch (error) {
56
+ const errMsg = error instanceof Error ? error.message : String(error);
57
+ if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
58
+ this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
59
+ }
60
+ throw error;
61
+ }
62
+ if (!sourceStageId) {
63
+ this.error(`Work item '${workItemId}' is not currently assigned to a pipeline stage.`);
64
+ }
65
+ const pipelineId = await getPipelineIdForProject(connection, projectId);
66
+ if (!pipelineId) {
67
+ this.error(`No pipeline found for work item ${workItemId}. Ensure the project has an associated pipeline.`);
68
+ }
69
+ let result;
70
+ try {
71
+ result = await prepareWorkItem({
72
+ connection,
73
+ pipelineId,
74
+ workItemId,
75
+ sourceStageId,
76
+ targetStageId: flags['target-stage-id'],
77
+ });
78
+ }
79
+ catch (error) {
80
+ const errMsg = error instanceof Error ? error.message : String(error);
81
+ if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
82
+ this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
83
+ }
84
+ throw error;
85
+ }
86
+ if (result.success) {
87
+ this.log(`Work item ${workItemId} prepared for one-off promotion.`);
88
+ this.log(` Request Token: ${result.requestToken ?? ''}`);
89
+ }
90
+ else {
91
+ this.log('Failed to prepare work item for one-off promotion.');
92
+ this.log(` Error Code: ${result.errorCode ?? ''}`);
93
+ this.log(` Error Message: ${result.errorMessage ?? ''}`);
94
+ }
95
+ return result;
96
+ }
97
+ }
98
+ //# sourceMappingURL=prepare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/prepare.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Org } from '@salesforce/core';
2
2
  import { SfCommand } from '@salesforce/sf-plugins-core';
3
- import { UpdateWorkItemStatusResult } from '../../../../utils/updateWorkItemStatus.js';
4
- export default class DevopsWorkItemStatusUpdate extends SfCommand<UpdateWorkItemStatusResult> {
3
+ import { UpdateWorkItemResult } from '../../../utils/updateWorkItem.js';
4
+ export default class DevopsWorkItemUpdate extends SfCommand<UpdateWorkItemResult> {
5
5
  static readonly summary: string;
6
6
  static readonly description: string;
7
7
  static readonly examples: string[];
@@ -10,7 +10,9 @@ export default class DevopsWorkItemStatusUpdate extends SfCommand<UpdateWorkItem
10
10
  'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
11
  'work-item-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
12
  'work-item-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- status: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ subject: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
16
  };
15
- run(): Promise<UpdateWorkItemStatusResult>;
17
+ run(): Promise<UpdateWorkItemResult>;
16
18
  }
@@ -15,11 +15,11 @@
15
15
  */
16
16
  import { Messages } from '@salesforce/core';
17
17
  import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
18
- import { resolveWorkItemByName, resolveProjectIdForWorkItem, updateWorkItemStatus, ALLOWED_STATUSES, } from '../../../../utils/updateWorkItemStatus.js';
18
+ import { resolveWorkItemByName, resolveProjectIdForWorkItem, updateWorkItem, ALLOWED_STATUSES, } from '../../../utils/updateWorkItem.js';
19
19
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
20
- const messages = Messages.loadMessages('@salesforce/plugin-devops-center', 'devops.work-item.status.update');
20
+ const messages = Messages.loadMessages('@salesforce/plugin-devops-center', 'devops.work-item.update');
21
21
  const commonErrorMessages = Messages.loadMessages('@salesforce/plugin-devops-center', 'commonErrors');
22
- export default class DevopsWorkItemStatusUpdate extends SfCommand {
22
+ export default class DevopsWorkItemUpdate extends SfCommand {
23
23
  static summary = messages.getMessage('summary');
24
24
  static description = messages.getMessage('description');
25
25
  static examples = messages.getMessages('examples');
@@ -36,14 +36,22 @@ export default class DevopsWorkItemStatusUpdate extends SfCommand {
36
36
  char: 'w',
37
37
  exactlyOne: ['work-item-name', 'work-item-id'],
38
38
  }),
39
+ subject: Flags.string({
40
+ summary: messages.getMessage('flags.subject.summary'),
41
+ }),
42
+ description: Flags.string({
43
+ summary: messages.getMessage('flags.description.summary'),
44
+ }),
39
45
  status: Flags.string({
40
46
  summary: messages.getMessage('flags.status.summary'),
41
- required: true,
42
47
  options: [...ALLOWED_STATUSES],
43
48
  }),
44
49
  };
45
50
  async run() {
46
- const { flags } = await this.parse(DevopsWorkItemStatusUpdate);
51
+ const { flags } = await this.parse(DevopsWorkItemUpdate);
52
+ if (!flags['subject'] && !flags['description'] && !flags['status']) {
53
+ this.error(messages.getMessage('error.NoFieldsProvided'));
54
+ }
47
55
  const org = flags['target-org'];
48
56
  const connection = org.getConnection(flags['api-version']);
49
57
  let workItemId;
@@ -68,7 +76,14 @@ export default class DevopsWorkItemStatusUpdate extends SfCommand {
68
76
  }
69
77
  let result;
70
78
  try {
71
- result = await updateWorkItemStatus({ connection, workItemId, projectId, status: flags['status'] });
79
+ result = await updateWorkItem({
80
+ connection,
81
+ workItemId,
82
+ projectId,
83
+ status: flags['status'],
84
+ subject: flags['subject'],
85
+ description: flags['description'],
86
+ });
72
87
  }
73
88
  catch (error) {
74
89
  const errMsg = error instanceof Error ? error.message : String(error);
@@ -78,11 +93,17 @@ export default class DevopsWorkItemStatusUpdate extends SfCommand {
78
93
  throw error;
79
94
  }
80
95
  if (result.success) {
81
- const identifier = flags['work-item-name'] ?? result.workItemId;
82
- this.log(`Successfully updated status for work item ${identifier} to "${result.status ?? flags['status']}".`);
96
+ const identifier = flags['work-item-name'] ?? workItemId;
97
+ this.log(`Successfully updated work item ${identifier}.`);
98
+ if (result.subject !== undefined)
99
+ this.log(` Subject: ${result.subject}`);
100
+ if (result.description !== undefined)
101
+ this.log(` Description: ${result.description}`);
102
+ if (result.status !== undefined)
103
+ this.log(` Status: ${result.status}`);
83
104
  }
84
105
  else {
85
- this.error(`Failed to update work item status: ${result.error ?? ''}`);
106
+ this.error(`Failed to update work item: ${result.error ?? ''}`);
86
107
  }
87
108
  return result;
88
109
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/update.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export declare const testLevel: import("@oclif/core/interfaces").FlagDefinition<
10
10
  requiredOrDefaulted: false;
11
11
  }>;
12
12
  export declare const specificTests: OptionFlag<string[] | undefined>;
13
+ export declare const specificTestsNoChar: OptionFlag<string[] | undefined>;
13
14
  export declare const deployAll: BooleanFlag<boolean>;
14
15
  export declare const bundleVersionName: OptionFlag<string | undefined>;
15
16
  export declare const async: BooleanFlag<boolean>;
@@ -41,6 +41,11 @@ export const specificTests = Flags.string({
41
41
  description: messages.getMessage('promote.tests.description'),
42
42
  summary: messages.getMessage('promote.tests.summary'),
43
43
  });
44
+ export const specificTestsNoChar = Flags.string({
45
+ multiple: true,
46
+ description: messages.getMessage('promote.tests.description'),
47
+ summary: messages.getMessage('promote.tests.summary'),
48
+ });
44
49
  export const deployAll = Flags.boolean({
45
50
  char: 'a',
46
51
  description: messages.getMessage('promote.deploy-all.description'),
@@ -1 +1 @@
1
- {"version":3,"file":"promoteFlags.js","sourceRoot":"","sources":["../../../../src/common/flags/promote/promoteFlags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,cAAc,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAuB,KAAK,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC;IAC3D,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAY;IACpD,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAkB,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IACjC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC;IAClE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAqC,KAAK,CAAC,MAAM,CAAC;IAC1E,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAyB,KAAK,CAAC,OAAO,CAAC;IAC3D,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC;IAClE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAmC,KAAK,CAAC,MAAM,CAAC;IAC5E,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qCAAqC,CAAC;IACnE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,yCAAyC,CAAC;CAC5E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAyB,KAAK,CAAC,OAAO,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC"}
1
+ {"version":3,"file":"promoteFlags.js","sourceRoot":"","sources":["../../../../src/common/flags/promote/promoteFlags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,cAAc,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAuB,KAAK,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC;IAC3D,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAY;IACpD,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAkB,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IACjC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC;IAClE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAqC,KAAK,CAAC,MAAM,CAAC;IAC1E,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAqC,KAAK,CAAC,MAAM,CAAC;IAChF,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAyB,KAAK,CAAC,OAAO,CAAC;IAC3D,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC;IAClE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAmC,KAAK,CAAC,MAAM,CAAC;IAC5E,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qCAAqC,CAAC;IACnE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,yCAAyC,CAAC;CAC5E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAyB,KAAK,CAAC,OAAO,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC"}
@@ -15,7 +15,7 @@
15
15
  */
16
16
  /* eslint-disable no-console, class-methods-use-this */
17
17
  import { Messages } from '@salesforce/core';
18
- import chalk from 'chalk';
18
+ import { StandardColors } from '@salesforce/sf-plugins-core';
19
19
  import { AsyncOperationStatus } from '../types.js';
20
20
  import { AbstractOutputService } from './outputService.js';
21
21
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
@@ -34,14 +34,14 @@ export class AbstractAorOutputService extends AbstractOutputService {
34
34
  }
35
35
  printAorStatus(aor) {
36
36
  if (aor.sf_devops__Status__c === AsyncOperationStatus.Completed) {
37
- console.log(chalk.green(aor.sf_devops__Message__c));
37
+ console.log(StandardColors.success(aor.sf_devops__Message__c));
38
38
  }
39
39
  else if (aor.sf_devops__Status__c === AsyncOperationStatus.Error) {
40
40
  if (aor.sf_devops__Error_Details__c) {
41
- console.log(chalk.red(output.getMessage('output.aor-error-status', [aor.sf_devops__Message__c, aor.sf_devops__Error_Details__c])));
41
+ console.log(StandardColors.error(output.getMessage('output.aor-error-status', [aor.sf_devops__Message__c, aor.sf_devops__Error_Details__c])));
42
42
  }
43
43
  else {
44
- console.log(chalk.red(aor.sf_devops__Message__c));
44
+ console.log(StandardColors.error(aor.sf_devops__Message__c));
45
45
  }
46
46
  }
47
47
  else if (aor.sf_devops__Message__c) {
@@ -1 +1 @@
1
- {"version":3,"file":"aorOutputService.js","sourceRoot":"","sources":["../../../src/common/outputService/aorOutputService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAwB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAA8B,MAAM,oBAAoB,CAAC;AAEvF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,sBAAsB,CAAC,CAAC;AAiCjG;;;;GAIG;AACH,MAAM,OAAgB,wBACpB,SAAQ,qBAAwB;IAGtB,KAAK,CAAS;IACd,MAAM,CAAmC;IAEnD,YAAmB,KAAQ,EAAE,KAAa;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,cAAc,CAAC,GAAyB;QAC7C,IAAI,GAAG,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,SAAS,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,KAAK,EAAE,CAAC;YACnE,IAAI,GAAG,CAAC,2BAA2B,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,MAAM,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAC3G,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC;IACzC,CAAC;IAEM,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CAGF"}
1
+ {"version":3,"file":"aorOutputService.js","sourceRoot":"","sources":["../../../src/common/outputService/aorOutputService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAwB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAA8B,MAAM,oBAAoB,CAAC;AAEvF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,sBAAsB,CAAC,CAAC;AAiCjG;;;;GAIG;AACH,MAAM,OAAgB,wBACpB,SAAQ,qBAAwB;IAGtB,KAAK,CAAS;IACd,MAAM,CAAmC;IAEnD,YAAmB,KAAQ,EAAE,KAAa;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,cAAc,CAAC,GAAyB;QAC7C,IAAI,GAAG,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,SAAS,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,KAAK,EAAE,CAAC;YACnE,IAAI,GAAG,CAAC,2BAA2B,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CACT,cAAc,CAAC,KAAK,CAClB,MAAM,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAC3G,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC;IACzC,CAAC;IAEM,UAAU;QACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CAGF"}
@@ -14,10 +14,9 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { StandardColors } from '@salesforce/sf-plugins-core';
17
- import chalk from 'chalk';
18
17
  import { AsyncOperationStatus } from '../types.js';
19
18
  export function tableHeader(message) {
20
- return chalk.blue(chalk.bold(message));
19
+ return StandardColors.info(message);
21
20
  }
22
21
  export function colorStatus(status) {
23
22
  if (status === AsyncOperationStatus.Completed)
@@ -1 +1 @@
1
- {"version":3,"file":"outputUtils.js","sourceRoot":"","sources":["../../../src/common/outputService/outputUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAA4B;IACtD,IAAI,MAAM,KAAK,oBAAoB,CAAC,SAAS;QAAE,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,MAAM,KAAK,oBAAoB,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;QAC1E,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"outputUtils.js","sourceRoot":"","sources":["../../../src/common/outputService/outputUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAA4B;IACtD,IAAI,MAAM,KAAK,oBAAoB,CAAC,SAAS;QAAE,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,MAAM,KAAK,oBAAoB,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;QAC1E,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC"}
@@ -13,14 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  *
19
20
  * Returns an Async Operation Result record filtering by project name.
20
21
  */
21
22
  export async function selectAsyncOperationResultById(con, aorId) {
23
+ validateSalesforceId(aorId, 'async operation result');
22
24
  const queryStr = `SELECT sf_devops__Status__c, sf_devops__Message__c, sf_devops__Error_Details__c
23
- FROM sf_devops__Async_Operation_Result__c
25
+ FROM sf_devops__Async_Operation_Result__c
24
26
  WHERE Id = '${aorId}'`;
25
27
  const resp = await runSafeQuery(con, queryStr);
26
28
  return resp.records[0];
@@ -1 +1 @@
1
- {"version":3,"file":"asyncOperationResultsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/asyncOperationResultsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAe,EAAE,KAAa;IACjF,MAAM,QAAQ,GAAG;;kCAEe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAAsC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"asyncOperationResultsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/asyncOperationResultsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAe,EAAE,KAAa;IACjF,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG;;kCAEe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAAsC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -13,18 +13,17 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  export async function selectDeployComponentsByAsyncOpId(con, asyncOpId) {
18
- const queryStr = `SELECT sf_devops__Source_Component__c, sf_devops__Operation__c, sf_devops__File_Path__c
19
- FROM sf_devops__Deploy_Component__c
20
- WHERE sf_devops__Deployment_Result__r.sf_devops__Status__c = '${asyncOpId}'`;
19
+ validateSalesforceId(asyncOpId, 'async operation');
20
+ const queryStr = `SELECT sf_devops__Source_Component__c, sf_devops__Operation__c, sf_devops__File_Path__c FROM sf_devops__Deploy_Component__c WHERE sf_devops__Deployment_Result__r.sf_devops__Status__c = '${asyncOpId}'`;
21
21
  const resp = await runSafeQuery(con, queryStr);
22
22
  return resp.records;
23
23
  }
24
24
  export async function selectDeployComponentsForCheckDeployByAsynchOpId(con, asyncOpId) {
25
- const queryStr = `SELECT sf_devops__Source_Component__c, sf_devops__Operation__c, sf_devops__File_Path__c
26
- FROM sf_devops__Deploy_Component__c
27
- WHERE sf_devops__Deployment_Result__r.sf_devops__Check_Deploy_Status__c = '${asyncOpId}'`;
25
+ validateSalesforceId(asyncOpId, 'async operation');
26
+ const queryStr = `SELECT sf_devops__Source_Component__c, sf_devops__Operation__c, sf_devops__File_Path__c FROM sf_devops__Deploy_Component__c WHERE sf_devops__Deployment_Result__r.sf_devops__Check_Deploy_Status__c = '${asyncOpId}'`;
28
27
  const resp = await runSafeQuery(con, queryStr);
29
28
  return resp.records;
30
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deployComponentsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deployComponentsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAe,EACf,SAAiB;IAEjB,MAAM,QAAQ,GAAG;;oFAEiE,SAAS,GAAG,CAAC;IAE/F,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gDAAgD,CACpE,GAAe,EACf,SAAiB;IAEjB,MAAM,QAAQ,GAAG;;iGAE8E,SAAS,GAAG,CAAC;IAE5G,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"deployComponentsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deployComponentsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAe,EACf,SAAiB;IAEjB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,6LAA6L,SAAS,GAAG,CAAC;IAE3N,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gDAAgD,CACpE,GAAe,EACf,SAAiB;IAEjB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,0MAA0M,SAAS,GAAG,CAAC;IAExO,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
@@ -13,16 +13,18 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  * Returns the data necessary to create the deploy summary (or part of it).
19
20
  */
20
21
  export async function selectDeployAORSummaryDataById(con, aorId) {
22
+ validateSalesforceId(aorId, 'async operation result');
21
23
  const queryStr = `SELECT Id, sf_devops__Operation__c,
22
24
  (SELECT sf_devops__Pipeline_Stage__r.Name, sf_devops__Pipeline_Stage__r.sf_devops__Environment__r.sf_devops__Named_Credential__c, sf_devops__Pipeline_Stage__r.sf_devops__Environment__r.Name, sf_devops__Work_Item__r.Name FROM sf_devops__Work_Item_Promotes__r),
23
25
  (SELECT sf_devops__Change_Bundle__r.Id, sf_devops__Change_Bundle__r.sf_devops__Version_Name__c, sf_devops__Environment__r.Id FROM sf_devops__Change_Bundle_Installs__r),
24
26
  (SELECT Name FROM sf_devops__Work_Items__r)
25
- FROM sf_devops__Async_Operation_Result__c
27
+ FROM sf_devops__Async_Operation_Result__c
26
28
  WHERE Id = '${aorId}'`;
27
29
  const resp = await runSafeQuery(con, queryStr);
28
30
  return resp.records[0];
@@ -1 +1 @@
1
- {"version":3,"file":"deployProgressSummarySelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deployProgressSummarySelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAe,EACf,KAAa;IAEb,MAAM,QAAQ,GAAG;;;;;kCAKe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAA0C,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"deployProgressSummarySelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deployProgressSummarySelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAe,EACf,KAAa;IAEb,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG;;;;;kCAKe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAA0C,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -13,17 +13,19 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  *
19
20
  * Returns deployment result record filtering by async job id.
20
21
  */
21
22
  export async function selectOneDeploymentResultByAsyncJobId(con, asyncJobId) {
23
+ validateSalesforceId(asyncJobId, 'async job');
22
24
  const queryStr = `SELECT sf_devops__Full_Deploy__c, sf_devops__Check_Deploy__c, sf_devops__Test_Level__c, sf_devops__Run_Tests__c, sf_devops__Completion_Date__c,
23
25
  sf_devops__Status__r.Id, sf_devops__Status__r.CreatedDate, sf_devops__Status__r.CreatedById,
24
- sf_devops__Status__r.CreatedBy.Name, sf_devops__Status__r.sf_devops__Message__c,
25
- sf_devops__Status__r.sf_devops__Status__c, sf_devops__Status__r.sf_devops__Error_Details__c
26
- FROM sf_devops__Deployment_Result__c
26
+ sf_devops__Status__r.CreatedBy.Name, sf_devops__Status__r.sf_devops__Message__c,
27
+ sf_devops__Status__r.sf_devops__Status__c, sf_devops__Status__r.sf_devops__Error_Details__c
28
+ FROM sf_devops__Deployment_Result__c
27
29
  WHERE sf_devops__Status__r.Id = '${asyncJobId}'`;
28
30
  const resp = await runSafeQuery(con, queryStr, true);
29
31
  return resp.totalSize > 0 ? resp.records[0] : null;
@@ -33,9 +35,10 @@ export async function selectOneDeploymentResultByAsyncJobId(con, asyncJobId) {
33
35
  * Returns if a deployment result is from a Check-Deploy by async job id.
34
36
  */
35
37
  export async function isCheckDeploy(con, asyncJobId) {
38
+ validateSalesforceId(asyncJobId, 'async job');
36
39
  const queryStr = `SELECT sf_devops__Check_Deploy__c,
37
- sf_devops__Status__r.Id, sf_devops__Check_Deploy_Status__r.Id
38
- FROM sf_devops__Deployment_Result__c
40
+ sf_devops__Status__r.Id, sf_devops__Check_Deploy_Status__r.Id
41
+ FROM sf_devops__Deployment_Result__c
39
42
  WHERE sf_devops__Status__r.Id = '${asyncJobId}'
40
43
  OR sf_devops__Check_Deploy_Status__r.Id = '${asyncJobId}'`;
41
44
  const resp = await runSafeQuery(con, queryStr, true);
@@ -47,9 +50,10 @@ export async function isCheckDeploy(con, asyncJobId) {
47
50
  * Returns deployment result record with Change Bundle Installs filtering by check deploy job id.
48
51
  */
49
52
  export async function selectOneDeploymentResultWithChangeBundleInstallsByAsyncJobId(con, asyncJobId) {
53
+ validateSalesforceId(asyncJobId, 'async job');
50
54
  const queryStr = `SELECT sf_devops__Check_Deploy__c, sf_devops__Deployment_Id__c, sf_devops__Check_Deploy_Status__r.sf_devops__Status__c,
51
55
  (SELECT sf_devops__Environment__c FROM sf_devops__Change_Bundle_Installs__r)
52
- FROM sf_devops__Deployment_Result__c
56
+ FROM sf_devops__Deployment_Result__c
53
57
  WHERE sf_devops__Check_Deploy_Status__c = '${asyncJobId}'
54
58
  AND sf_devops__Check_Deploy__c = TRUE
55
59
  AND Id IN (SELECT sf_devops__Deployment_Result__c FROM sf_devops__Change_Bundle_Install__c)`;
@@ -1 +1 @@
1
- {"version":3,"file":"deploymentResultsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deploymentResultsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,GAAe,EACf,UAAkB;IAElB,MAAM,QAAQ,GAAG;;;;;uDAKoC,UAAU,GAAG,CAAC;IAEnE,MAAM,IAAI,GAAkC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe,EAAE,UAAkB;IACrE,MAAM,QAAQ,GAAG;;;uDAGoC,UAAU;iEACA,UAAU,GAAG,CAAC;IAE7E,MAAM,IAAI,GAA6C,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6DAA6D,CACjF,GAAe,EACf,UAAkB;IAElB,MAAM,QAAQ,GAAG;;;iEAG8C,UAAU;;kHAEuC,CAAC;IAEjH,MAAM,IAAI,GAA+D,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjH,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"deploymentResultsSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/deploymentResultsSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,GAAe,EACf,UAAkB;IAElB,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG;;;;;uDAKoC,UAAU,GAAG,CAAC;IAEnE,MAAM,IAAI,GAAkC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe,EAAE,UAAkB;IACrE,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG;;;uDAGoC,UAAU;iEACA,UAAU,GAAG,CAAC;IAE7E,MAAM,IAAI,GAA6C,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6DAA6D,CACjF,GAAe,EACf,UAAkB;IAElB,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG;;;iEAG8C,UAAU;;kHAEuC,CAAC;IAEjH,MAAM,IAAI,GAA+D,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjH,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC"}
@@ -13,14 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  * Returns the named credential and pipeline stage name associated with the envId sent
19
20
  */
20
21
  export async function selectPipelineStageByEnvironment(con, envId) {
21
- const queryStr = `SELECT Name,
22
+ validateSalesforceId(envId, 'environment');
23
+ const queryStr = `SELECT Name,
22
24
  (SELECT Name FROM sf_devops__Pipeline_Stages__r)
23
- FROM sf_devops__Environment__c
25
+ FROM sf_devops__Environment__c
24
26
  WHERE Id = '${envId}'`;
25
27
  const resp = await runSafeQuery(con, queryStr);
26
28
  return resp.records[0];
@@ -1 +1 @@
1
- {"version":3,"file":"environmentSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/environmentSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,GAAe,EAAE,KAAa;IACnF,MAAM,QAAQ,GAAG;;;kCAGe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAAgC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"environmentSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/environmentSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,GAAe,EAAE,KAAa;IACnF,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG;;;kCAGe,KAAK,GAAG,CAAC;IAEzC,MAAM,IAAI,GAAgC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { escapeSOQL } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  * Given a named credential it returns the org url (endpoint) associated with it
@@ -21,7 +22,7 @@ export async function selectNamedCredentialByName(con, name) {
21
22
  const queryStr = `
22
23
  SELECT Endpoint
23
24
  FROM NamedCredential
24
- WHERE DeveloperName = '${name}'
25
+ WHERE DeveloperName = '${escapeSOQL(name)}'
25
26
  AND NamespacePrefix = 'sf_devops'
26
27
  LIMIT 1`;
27
28
  const resp = await runSafeQuery(con, queryStr);
@@ -1 +1 @@
1
- {"version":3,"file":"namedCredentialSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/namedCredentialSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,GAAe,EAAE,IAAY;IAC7E,MAAM,QAAQ,GAAG;;;6BAGU,IAAI;;YAErB,CAAC;IAEX,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"namedCredentialSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/namedCredentialSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,GAAe,EAAE,IAAY;IAC7E,MAAM,QAAQ,GAAG;;;6BAGU,UAAU,CAAC,IAAI,CAAC;;YAEjC,CAAC;IAEX,MAAM,IAAI,GAAiC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { escapeSOQL, validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  *
@@ -20,8 +21,8 @@ import { runSafeQuery } from './selectorUtils.js';
20
21
  */
21
22
  export async function selectPipelineStagesByProject(con, projectName) {
22
23
  const queryStr = `SELECT Id, sf_devops__Pipeline__r.sf_devops__Project__c, sf_devops__Branch__r.sf_devops__Name__c, (SELECT Id FROM sf_devops__Pipeline_Stages__r)
23
- FROM sf_devops__Pipeline_Stage__c
24
- WHERE sf_devops__Pipeline__r.sf_devops__Project__r.Name = '${projectName}'`;
24
+ FROM sf_devops__Pipeline_Stage__c
25
+ WHERE sf_devops__Pipeline__r.sf_devops__Project__r.Name = '${escapeSOQL(projectName)}'`;
25
26
  const resp = await runSafeQuery(con, queryStr);
26
27
  return resp.records;
27
28
  }
@@ -30,8 +31,9 @@ export async function selectPipelineStagesByProject(con, projectName) {
30
31
  * Returns an array of a pipeline stages filtering by environment Id.
31
32
  */
32
33
  export async function selectOnePipelineStageByEnvironmentId(con, envId) {
34
+ validateSalesforceId(envId, 'environment');
33
35
  const queryStr = `SELECT Id, sf_devops__Pipeline__r.sf_devops__Project__c, sf_devops__Branch__r.sf_devops__Name__c, (SELECT Id FROM sf_devops__Pipeline_Stages__r)
34
- FROM sf_devops__Pipeline_Stage__c
36
+ FROM sf_devops__Pipeline_Stage__c
35
37
  WHERE sf_devops__Environment__c = '${envId}'`;
36
38
  const resp = await runSafeQuery(con, queryStr);
37
39
  return resp.records[0];
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineStageSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/pipelineStageSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,GAAe,EAAE,WAAmB;IACtF,MAAM,QAAQ,GAAG;;iFAE8D,WAAW,GAAG,CAAC;IAE9F,MAAM,IAAI,GAA+B,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,GAAe,EACf,KAAa;IAEb,MAAM,QAAQ,GAAG;;yDAEsC,KAAK,GAAG,CAAC;IAEhE,MAAM,IAAI,GAA+B,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"pipelineStageSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/pipelineStageSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,GAAe,EAAE,WAAmB;IACtF,MAAM,QAAQ,GAAG;;iFAE8D,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;IAE1G,MAAM,IAAI,GAA+B,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,GAAe,EACf,KAAa;IAEb,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG;;yDAEsC,KAAK,GAAG,CAAC;IAEhE,MAAM,IAAI,GAA+B,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -13,13 +13,15 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceId } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  * Returns the data necessary to create the deploy summary (or part of it).
19
20
  */
20
21
  export async function selectValidateDeployAORSummaryDataById(con, aorId) {
22
+ validateSalesforceId(aorId, 'async operation result');
21
23
  const queryStr = `SELECT sf_devops__Change_Bundle__r.Id, sf_devops__Change_Bundle__r.sf_devops__Version_Name__c, sf_devops__Environment__r.Id
22
- FROM sf_devops__Change_Bundle_Install__c
24
+ FROM sf_devops__Change_Bundle_Install__c
23
25
  WHERE sf_devops__Deployment_Result__r.sf_devops__Check_Deploy_Status__c = '${aorId}'`;
24
26
  const resp = await runSafeQuery(con, queryStr);
25
27
  return resp.records;
@@ -1 +1 @@
1
- {"version":3,"file":"validateDeploySelector.js","sourceRoot":"","sources":["../../../src/common/selectors/validateDeploySelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,GAAe,EACf,KAAa;IAEb,MAAM,QAAQ,GAAG;;iGAE8E,KAAK,GAAG,CAAC;IAExG,MAAM,IAAI,GAAqC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"validateDeploySelector.js","sourceRoot":"","sources":["../../../src/common/selectors/validateDeploySelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,GAAe,EACf,KAAa;IAEb,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG;;iGAE8E,KAAK,GAAG,CAAC;IAExG,MAAM,IAAI,GAAqC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
@@ -13,15 +13,18 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { validateSalesforceIds } from '../../utils/soqlUtils.js';
16
17
  import { runSafeQuery } from './selectorUtils.js';
17
18
  /**
18
19
  * Returns the work items included in the change bundles sent
19
20
  */
20
21
  export async function selectWorkItemsByChangeBundles(con, changeBundles) {
22
+ // Validate all IDs before constructing the IN clause
23
+ const validatedIds = validateSalesforceIds(changeBundles, 'change bundles');
21
24
  const queryStr = `SELECT Id,
22
25
  (SELECT Name FROM sf_devops__Work_Items__r)
23
26
  FROM sf_devops__Change_Bundle__c
24
- WHERE Id IN (${changeBundles.map((id) => "'" + id + "'").join(', ')})`;
27
+ WHERE Id IN (${validatedIds.map((id) => "'" + id + "'").join(', ')})`;
25
28
  const resp = await runSafeQuery(con, queryStr);
26
29
  return resp.records;
27
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workItemSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/workItemSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAe,EACf,aAAuB;IAEvB,MAAM,QAAQ,GAAG;;;mCAGgB,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAEzF,MAAM,IAAI,GAAsC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"workItemSelector.js","sourceRoot":"","sources":["../../../src/common/selectors/workItemSelector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,GAAe,EACf,aAAuB;IAEvB,qDAAqD;IACrD,MAAM,YAAY,GAAG,qBAAqB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG;;;mCAGgB,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAExF,MAAM,IAAI,GAAsC,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}