Skip to content

Commit ddbe09b

Browse files
author
Diler Zaza
committed
Refactoring and adjusting helper functions
1 parent 49d317d commit ddbe09b

File tree

3 files changed

+27
-21
lines changed

3 files changed

+27
-21
lines changed

packages/core/src/stepFunctions/executionDetails/handleMessage.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@ import {
1919
handleUnsupportedMessage,
2020
apiCallMessageHandler,
2121
} from '../messageHandlers/handleMessageHelpers'
22-
import { parseExecutionArnForStateMachine, openWFSfromARN } from '../utils'
22+
import { parseExecutionArnForStateMachine, openWorkflowStudio } from '../utils'
2323
import { ExecuteStateMachineWebview } from '../vue/executeStateMachine/executeStateMachine'
2424
import { VueWebview } from '../../webviews/main'
2525
import globals from '../../shared/extensionGlobals'
26-
// import { ExecutionDetailProvider } from './executionDetailProvider'
27-
// import { WorkflowStudioEditorProvider } from '../workflowStudio/workflowStudioEditorProvider'
2826

2927
/**
3028
* Handles messages received from the ExecutionDetails webview. Depending on the message type and command,
@@ -91,7 +89,12 @@ async function initMessageHandler(context: ExecutionDetailsContext) {
9189

9290
async function startExecutionMessageHandler(context: ExecutionDetailsContext) {
9391
// Parsing execution ARN to get state machine info
94-
const { region, stateMachineName, stateMachineArn } = parseExecutionArnForStateMachine(context.executionArn)
92+
const parsedArn = parseExecutionArnForStateMachine(context.executionArn)
93+
if (!parsedArn) {
94+
throw new Error(`Invalid execution ARN format: ${context.executionArn}`)
95+
}
96+
97+
const { region, stateMachineName, stateMachineArn } = parsedArn
9598

9699
const Panel = VueWebview.compilePanel(ExecuteStateMachineWebview)
97100
const wv = new Panel(globals.context, globals.outputChannel, {
@@ -107,5 +110,6 @@ async function startExecutionMessageHandler(context: ExecutionDetailsContext) {
107110
}
108111

109112
async function editStateMachineMessageHandler(context: ExecutionDetailsContext) {
110-
await openWFSfromARN(context)
113+
const params = parseExecutionArnForStateMachine(context.executionArn)
114+
await openWorkflowStudio(params!.stateMachineArn, params!.region)
111115
}

packages/core/src/stepFunctions/utils.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ import {
1717
} from 'amazon-states-language-service'
1818
import { fromExtensionManifest } from '../shared/settings'
1919
import { IamRole } from '../shared/clients/iam'
20-
import { ExecutionDetailsContext } from './messageHandlers/types'
2120
import { WorkflowStudioEditorProvider } from './workflowStudio/workflowStudioEditorProvider'
2221

2322
const documentSettings: DocumentLanguageSettings = { comments: 'error', trailingCommas: 'error' }
2423
const languageService = getLanguageService({})
2524

2625
const arnResourceTypeSegmentIndex = 5
2726
const expressExecutionArnSegmentCount = 9
27+
const executionArnSegmentCount = 8
2828
const arnRegionSegmentIndex = 3
2929
const arnAccountIdSegmentIndex = 4
3030
const arnStateMachineNameSegmentIndex = 6
@@ -119,14 +119,16 @@ export const isExpressExecution = (arn: string): boolean => {
119119
*/
120120
export const parseExecutionArnForStateMachine = (executionArn: string) => {
121121
const arnSegments = executionArn.split(':')
122-
const region = arnSegments[arnRegionSegmentIndex]
123-
const stateMachineName = arnSegments[arnStateMachineNameSegmentIndex]
124-
const stateMachineArn = `arn:aws:states:${region}:${arnSegments[arnAccountIdSegmentIndex]}:stateMachine:${stateMachineName}`
125-
126-
return {
127-
region,
128-
stateMachineName,
129-
stateMachineArn,
122+
if (arnSegments.length === executionArnSegmentCount || arnSegments.length === expressExecutionArnSegmentCount) {
123+
const region = arnSegments[arnRegionSegmentIndex]
124+
const stateMachineName = arnSegments[arnStateMachineNameSegmentIndex]
125+
const stateMachineArn = `arn:aws:states:${region}:${arnSegments[arnAccountIdSegmentIndex]}:stateMachine:${stateMachineName}`
126+
127+
return {
128+
region,
129+
stateMachineName,
130+
stateMachineArn,
131+
}
130132
}
131133
}
132134

@@ -156,16 +158,11 @@ export const openWorkflowStudioWithDefinition = async (definition: string | unde
156158

157159
const textEditor = await vscode.window.showTextDocument(doc)
158160
await WorkflowStudioEditorProvider.openWithWorkflowStudio(textEditor.document.uri, {
159-
preserveFocus: true,
160-
viewColumn: vscode.ViewColumn.Beside,
161+
preserveFocus: false,
162+
viewColumn: vscode.ViewColumn.One,
161163
})
162164
}
163165

164-
export const openWFSfromARN = async (context: ExecutionDetailsContext) => {
165-
const params = parseExecutionArnForStateMachine(context.executionArn)
166-
await openWorkflowStudio(params.stateMachineArn, params.region)
167-
}
168-
169166
const isInvalidJson = (content: string): boolean => {
170167
try {
171168
JSON.parse(content)

packages/core/src/test/stepFunctions/utils.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ describe('parseExecutionArnForStateMachine', function () {
276276
const expressArn = 'arn:aws:states:us-east-1:123456789012:express:stateMachine:MyStateMachine:execution-name'
277277
const result = parseExecutionArnForStateMachine(expressArn)
278278

279+
assert.ok(result)
279280
assert.strictEqual(result.region, 'us-east-1')
280281
assert.strictEqual(result.stateMachineName, 'MyStateMachine')
281282
assert.strictEqual(result.stateMachineArn, 'arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine')
@@ -285,6 +286,7 @@ describe('parseExecutionArnForStateMachine', function () {
285286
const standardArn = 'arn:aws:states:us-west-2:987654321098:stateMachine:TestMachine:execution-id'
286287
const result = parseExecutionArnForStateMachine(standardArn)
287288

289+
assert.ok(result)
288290
assert.strictEqual(result.region, 'us-west-2')
289291
assert.strictEqual(result.stateMachineName, 'TestMachine')
290292
assert.strictEqual(result.stateMachineArn, 'arn:aws:states:us-west-2:987654321098:stateMachine:TestMachine')
@@ -294,6 +296,7 @@ describe('parseExecutionArnForStateMachine', function () {
294296
const euArn = 'arn:aws:states:eu-west-1:555666777888:stateMachine:EuroMachine:exec-123'
295297
const result = parseExecutionArnForStateMachine(euArn)
296298

299+
assert.ok(result)
297300
assert.strictEqual(result.region, 'eu-west-1')
298301
assert.strictEqual(result.stateMachineName, 'EuroMachine')
299302
assert.strictEqual(result.stateMachineArn, 'arn:aws:states:eu-west-1:555666777888:stateMachine:EuroMachine')
@@ -304,6 +307,7 @@ describe('parseExecutionArnForStateMachine', function () {
304307
'arn:aws:states:ap-southeast-2:111222333444:stateMachine:My-State_Machine.Test:exec-456'
305308
const result = parseExecutionArnForStateMachine(arnWithSpecialName)
306309

310+
assert.ok(result)
307311
assert.strictEqual(result.region, 'ap-southeast-2')
308312
assert.strictEqual(result.stateMachineName, 'My-State_Machine.Test')
309313
assert.strictEqual(
@@ -316,6 +320,7 @@ describe('parseExecutionArnForStateMachine', function () {
316320
const differentAccountArn = 'arn:aws:states:us-central-1:999888777666:stateMachine:AccountTestMachine:exec-789'
317321
const result = parseExecutionArnForStateMachine(differentAccountArn)
318322

323+
assert.ok(result)
319324
assert.strictEqual(result.region, 'us-central-1')
320325
assert.strictEqual(result.stateMachineName, 'AccountTestMachine')
321326
assert.strictEqual(

0 commit comments

Comments
 (0)