Merge parser and expressions into repository

This commit is contained in:
Christopher Schleiden
2023-01-06 15:54:31 -08:00
parent 4f961a6247
commit 70e33f999d
328 changed files with 35337 additions and 0 deletions
@@ -0,0 +1,52 @@
import {
TemplateContext,
TemplateValidationErrors,
} from "../templates/template-context"
import * as templateReader from "../templates/template-reader"
import { TemplateToken } from "../templates/tokens/template-token"
import { TraceWriter } from "../templates/trace-writer"
import { File } from "./file"
import { WORKFLOW_ROOT } from "./workflow-constants"
import { getWorkflowSchema } from "./workflow-schema"
import { YamlObjectReader } from "./yaml-object-reader"
export interface ParseWorkflowResult {
context: TemplateContext
value: TemplateToken | undefined
}
export function parseWorkflow(
entryFileName: string,
files: File[],
trace: TraceWriter
): ParseWorkflowResult {
const context = new TemplateContext(
new TemplateValidationErrors(),
getWorkflowSchema(),
trace
)
// Add file ids
files.forEach((x) => context.getFileId(x.name))
const fileId = context.getFileId(entryFileName)
const fileContent = files[fileId - 1].content
const reader = new YamlObjectReader(context, fileId, fileContent)
if (context.errors.count > 0) {
// The file is not valid YAML, template errors could be misleading
return {
context,
value: undefined,
}
}
const result = templateReader.readTemplate(
context,
WORKFLOW_ROOT,
reader,
fileId
)
return <ParseWorkflowResult>{
context,
value: result,
}
}