From 32613acc99f6ecc5d1d3fbede572f2cd649d3096 Mon Sep 17 00:00:00 2001 From: rrgoetz Date: Tue, 19 Nov 2024 10:02:46 -1000 Subject: [PATCH] Address Bryan PR reviews --- .../sequence-editor/from-seq-json.ts | 26 +++++++++++++------ src/utilities/sequence-editor/to-seq-json.ts | 17 ++++++++++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/utilities/sequence-editor/from-seq-json.ts b/src/utilities/sequence-editor/from-seq-json.ts index 160764e128..cd59465330 100644 --- a/src/utilities/sequence-editor/from-seq-json.ts +++ b/src/utilities/sequence-editor/from-seq-json.ts @@ -208,20 +208,20 @@ export async function seqJsonToSequence(input: string | null): Promise { if (seqJson.immediate_commands) { sequence.push(`\n`); sequence.push(`@IMMEDIATE\n`); - for (const rtc of seqJson.immediate_commands) { - switch (rtc.type) { + for (const realTimeCommand of seqJson.immediate_commands) { + switch (realTimeCommand.type) { case 'command': { // FSW Commands - sequence.push(commandToString(rtc)); + sequence.push(commandToString(realTimeCommand)); break; } case 'activate': case 'load': { - sequence.push(loadOrActivateToString(rtc)); + sequence.push(loadOrActivateToString(realTimeCommand)); break; } default: { - throw new Error(`Invalid immediate command type ${rtc.type}`); + throw new Error(`Invalid immediate command type ${realTimeCommand.type}`); } } } @@ -257,13 +257,23 @@ export async function seqJsonToSequence(input: string | null): Promise { return sequence.join(''); } +function isCommand(step: Command | ImmediateFswCommand): step is Command { + return (step as Command).time !== undefined; +} + function commandToString(step: Command | ImmediateFswCommand): string { - const time = 'time' in step ? `${seqJsonTimeToSequence(step.time)} ` : ''; const args = seqJsonArgsToSequence(step.args); const metadata = step.metadata ? seqJsonMetadataToSequence(step.metadata) : ''; - const models = 'models' in step ? (step.models ? seqJsonModelsToSequence(step.models) : '') : ''; const description = step.description ? seqJsonDescriptionToSequence(step.description) : ''; + // used for commands, ImmediateFswCommand doesn't support 'time' and 'models' + let time = ''; + let models = ''; + if (isCommand(step)) { + time = step.time ? `${seqJsonTimeToSequence(step.time)} ` : ''; + models = step.models ? (step.models ? seqJsonModelsToSequence(step.models) : '') : ''; + } + let commandString = `${time}${step.stem}${args}${description}`; // add a new line if on doesn't exit at the end of the commandString if (!commandString.endsWith('\n')) { @@ -275,7 +285,7 @@ function commandToString(step: Command | ImmediateFswCommand): string { } function loadOrActivateToString(step: Activate | Load | ImmediateActivate | ImmediateLoad) { - const time = 'time' in step ? `${seqJsonTimeToSequence(step.time)} ` : ''; + const time = (step as Activate | Load).time ? `${seqJsonTimeToSequence((step as Activate | Load).time)} ` : ''; const args = step.args ? seqJsonArgsToSequence(step.args) : ''; const metadata = step.metadata ? seqJsonMetadataToSequence(step.metadata) : ''; const models = step.models ? seqJsonModelsToSequence(step.models) : ''; diff --git a/src/utilities/sequence-editor/to-seq-json.ts b/src/utilities/sequence-editor/to-seq-json.ts index 7cd33aba17..cdfbb73016 100644 --- a/src/utilities/sequence-editor/to-seq-json.ts +++ b/src/utilities/sequence-editor/to-seq-json.ts @@ -190,6 +190,19 @@ function parseActivateLoad( const metadata = parseMetadata(stepNode, text); const models = parseModel(stepNode, text); + if (stepNode.name === 'Activate') { + return { + args, + description, + engine, + epoch, + metadata, + models, + sequence, + ...(!isRTC ? { time } : {}), + type: 'activate', + }; + } return { args, description, @@ -199,8 +212,8 @@ function parseActivateLoad( models, sequence, ...(!isRTC ? { time } : {}), - type: stepNode.name === 'Load' ? 'load' : 'activate', - } as Activate | Load | ImmediateActivate | ImmediateLoad; + type: 'load', + }; } function parseEngine(stepNode: SyntaxNode, text: string): number | undefined {