Add a FileProvider to parseWorkflow
This commit is contained in:
@@ -9,7 +9,7 @@ const nullTrace: TraceWriter = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export function createWorkflowContext(workflow: string, job?: string, stepIndex?: number): WorkflowContext {
|
export function createWorkflowContext(workflow: string, job?: string, stepIndex?: number): WorkflowContext {
|
||||||
const parsed = parseWorkflow("test.yaml", [{name: "test.yaml", content: workflow}], nullTrace);
|
const parsed = parseWorkflow({name: "test.yaml", content: workflow}, nullTrace);
|
||||||
if (!parsed.value) {
|
if (!parsed.value) {
|
||||||
throw new Error("Failed to parse workflow");
|
throw new Error("Failed to parse workflow");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ export async function complete(
|
|||||||
name: textDocument.uri,
|
name: textDocument.uri,
|
||||||
content: newDoc.getText()
|
content: newDoc.getText()
|
||||||
};
|
};
|
||||||
const result = parseWorkflow(file.name, [file], nullTrace);
|
const result = parseWorkflow(file, nullTrace);
|
||||||
if (!result.value) {
|
if (!result.value) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,10 @@ import {getWorkflowContext, WorkflowContext} from "./workflow-context";
|
|||||||
function testGetWorkflowContext(input: string): WorkflowContext {
|
function testGetWorkflowContext(input: string): WorkflowContext {
|
||||||
const [textDocument, pos] = getPositionFromCursor(input);
|
const [textDocument, pos] = getPositionFromCursor(input);
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
content: textDocument.getText(),
|
content: textDocument.getText(),
|
||||||
name: "wf.yaml"
|
name: "wf.yaml"
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export async function documentLinks(document: TextDocument): Promise<DocumentLin
|
|||||||
content: document.getText()
|
content: document.getText()
|
||||||
};
|
};
|
||||||
|
|
||||||
const result = parseWorkflow(file.name, [file], nullTrace);
|
const result = parseWorkflow(file, nullTrace);
|
||||||
if (!result.value) {
|
if (!result.value) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function testMapToExpressionPos(input: string) {
|
|||||||
name: td.uri,
|
name: td.uri,
|
||||||
content: td.getText()
|
content: td.getText()
|
||||||
};
|
};
|
||||||
const result = parseWorkflow(file.name, [file], nullTrace);
|
const result = parseWorkflow(file, nullTrace);
|
||||||
if (!result.value) {
|
if (!result.value) {
|
||||||
throw new Error("Invalid workflow");
|
throw new Error("Invalid workflow");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ async function hoverExpression(input: string) {
|
|||||||
name: td.uri,
|
name: td.uri,
|
||||||
content: td.getText()
|
content: td.getText()
|
||||||
};
|
};
|
||||||
const result = parseWorkflow(file.name, [file], nullTrace);
|
const result = parseWorkflow(file, nullTrace);
|
||||||
if (!result.value) {
|
if (!result.value) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export async function hover(document: TextDocument, position: Position, config?:
|
|||||||
name: document.uri,
|
name: document.uri,
|
||||||
content: document.getText()
|
content: document.getText()
|
||||||
};
|
};
|
||||||
const result = parseWorkflow(file.name, [file], nullTrace);
|
const result = parseWorkflow(file, nullTrace);
|
||||||
if (!result.value) {
|
if (!result.value) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,13 +27,10 @@ function testFindToken(input: string): {
|
|||||||
} {
|
} {
|
||||||
const [textDocument, pos] = getPositionFromCursor(input);
|
const [textDocument, pos] = getPositionFromCursor(input);
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
content: textDocument.getText(),
|
content: textDocument.getText(),
|
||||||
name: "wf.yaml"
|
name: "wf.yaml"
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export async function validate(
|
|||||||
const diagnostics: Diagnostic[] = [];
|
const diagnostics: Diagnostic[] = [];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result: ParseWorkflowResult = parseWorkflow(file.name, [file], nullTrace);
|
const result: ParseWorkflowResult = parseWorkflow(file, nullTrace);
|
||||||
if (result.value) {
|
if (result.value) {
|
||||||
// Errors will be updated in the context. Attempt to do the conversion anyway in order to give the user more information
|
// Errors will be updated in the context. Attempt to do the conversion anyway in order to give the user more information
|
||||||
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
|
const template = convertWorkflowTemplate(result.context, result.value, ErrorPolicy.TryConversion);
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
import {File} from "@github/actions-workflow-parser/workflows/file";
|
|
||||||
|
|
||||||
export type WorkflowProvider = {
|
|
||||||
getWorkflow: (name: string) => Promise<File | undefined>;
|
|
||||||
};
|
|
||||||
@@ -6,8 +6,6 @@ import {parseWorkflow} from "./workflows/workflow-parser";
|
|||||||
describe("Workflow Expression Parsing", () => {
|
describe("Workflow Expression Parsing", () => {
|
||||||
it("preserves original expressions when building format", () => {
|
it("preserves original expressions when building format", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -17,8 +15,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: echo 'hello'`
|
- run: echo 'hello'`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -44,8 +41,6 @@ jobs:
|
|||||||
|
|
||||||
it("preserves original expressions when building format for multi-line strings", () => {
|
it("preserves original expressions when building format for multi-line strings", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -56,8 +51,7 @@ jobs:
|
|||||||
- run: |
|
- run: |
|
||||||
echo \${{ github.event_name }}
|
echo \${{ github.event_name }}
|
||||||
echo 'hello' \${{github.ref }}`
|
echo 'hello' \${{github.ref }}`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -109,8 +103,6 @@ jobs:
|
|||||||
|
|
||||||
it("return errors and string token with preserved expressions for (multiple) expression errors", () => {
|
it("return errors and string token with preserved expressions for (multiple) expression errors", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -121,8 +113,7 @@ jobs:
|
|||||||
- run: |
|
- run: |
|
||||||
echo \${{ abc }}
|
echo \${{ abc }}
|
||||||
echo 'hello' \${{ gith }}`
|
echo 'hello' \${{ gith }}`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -147,8 +138,6 @@ jobs:
|
|||||||
|
|
||||||
it("reports all errors for multi-line expressions at the correct locations", () => {
|
it("reports all errors for multi-line expressions at the correct locations", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -159,8 +148,7 @@ jobs:
|
|||||||
- run: |
|
- run: |
|
||||||
echo \${{ fromJSON2('test') }}
|
echo \${{ fromJSON2('test') }}
|
||||||
echo 'hello' \${{ toJSON2(inputs.test) }}`
|
echo 'hello' \${{ toJSON2(inputs.test) }}`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -186,8 +174,6 @@ jobs:
|
|||||||
|
|
||||||
it("parses isExpression strings into expression tokens", () => {
|
it("parses isExpression strings into expression tokens", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -197,8 +183,7 @@ jobs:
|
|||||||
if: github.event_name == 'push'
|
if: github.event_name == 'push'
|
||||||
steps:
|
steps:
|
||||||
- run: echo 'hello'`
|
- run: echo 'hello'`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -5,13 +5,10 @@ import {parseWorkflow} from "./workflows/workflow-parser";
|
|||||||
describe("parseWorkflow", () => {
|
describe("parseWorkflow", () => {
|
||||||
it("parses valid workflow", () => {
|
it("parses valid workflow", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: "on: push\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - run: echo 'hello'"
|
content: "on: push\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - run: echo 'hello'"
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -20,13 +17,10 @@ describe("parseWorkflow", () => {
|
|||||||
|
|
||||||
it("contains range for error", () => {
|
it("contains range for error", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: "on: push\njobs:\n build:\n steps:\n - run: echo 'hello'"
|
content: "on: push\njobs:\n build:\n steps:\n - run: echo 'hello'"
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -40,8 +34,6 @@ describe("parseWorkflow", () => {
|
|||||||
|
|
||||||
it("error range for expression is constrained to scalar node", () => {
|
it("error range for expression is constrained to scalar node", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -51,8 +43,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: \${{ github.event = 12 }}
|
- name: \${{ github.event = 12 }}
|
||||||
run: echo 'hello'`
|
run: echo 'hello'`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -71,14 +62,11 @@ jobs:
|
|||||||
|
|
||||||
it("tokens contain descriptions", () => {
|
it("tokens contain descriptions", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content:
|
content:
|
||||||
"on: push\nname: hello\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - run: echo 'hello'"
|
"on: push\nname: hello\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - run: echo 'hello'"
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -9,16 +9,13 @@ function serializeTemplate(template: unknown): unknown {
|
|||||||
describe("convertWorkflowTemplate", () => {
|
describe("convertWorkflowTemplate", () => {
|
||||||
it("converts workflow with one job", () => {
|
it("converts workflow with one job", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest`
|
runs-on: ubuntu-latest`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -48,8 +45,6 @@ jobs:
|
|||||||
|
|
||||||
it("converts workflow if expressions", () => {
|
it("converts workflow if expressions", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -60,8 +55,7 @@ jobs:
|
|||||||
deploy:
|
deploy:
|
||||||
if: true
|
if: true
|
||||||
runs-on: ubuntu-latest`
|
runs-on: ubuntu-latest`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -100,8 +94,6 @@ jobs:
|
|||||||
|
|
||||||
it("converts workflow with empty needs", () => {
|
it("converts workflow with empty needs", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -109,8 +101,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
needs: # comment to preserve whitespace in test
|
needs: # comment to preserve whitespace in test
|
||||||
runs-on: ubuntu-latest`
|
runs-on: ubuntu-latest`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -145,8 +136,6 @@ jobs:
|
|||||||
|
|
||||||
it("converts workflow with needs errors", () => {
|
it("converts workflow with needs errors", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
@@ -159,8 +148,7 @@ jobs:
|
|||||||
job3:
|
job3:
|
||||||
needs: job1
|
needs: job1
|
||||||
runs-on: ubuntu-latest`
|
runs-on: ubuntu-latest`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -225,8 +213,6 @@ jobs:
|
|||||||
|
|
||||||
it("converts workflow with invalid on", () => {
|
it("converts workflow with invalid on", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on:
|
content: `on:
|
||||||
@@ -239,8 +225,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: echo hello`
|
- run: echo hello`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -288,15 +273,12 @@ jobs:
|
|||||||
|
|
||||||
it("converts workflow with invalid jobs", () => {
|
it("converts workflow with invalid jobs", () => {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push
|
content: `on: push
|
||||||
jobs:
|
jobs:
|
||||||
build:`
|
build:`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,10 @@ import {TemplateToken} from "./template-token";
|
|||||||
describe("traverse", () => {
|
describe("traverse", () => {
|
||||||
it("returns parent token and key", () => {
|
it("returns parent token and key", () => {
|
||||||
const workflow = parseWorkflow(
|
const workflow = parseWorkflow(
|
||||||
"wf.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "wf.yaml",
|
name: "wf.yaml",
|
||||||
content: `on: push`
|
content: `on: push`
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export interface FileProvider {
|
||||||
|
getFileContent(path: string): Promise<File | undefined>;
|
||||||
|
}
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
- name: 'Hello \${{ fromJSON('test') == inputs.name }}'
|
- name: 'Hello \${{ fromJSON('test') == inputs.name }}'
|
||||||
run: echo Hello, world!`;
|
run: echo Hello, world!`;
|
||||||
|
|
||||||
const result = parseWorkflow("main.yaml", [{name: "main.yaml", content: content}], nullTrace);
|
const result = parseWorkflow({name: "main.yaml", content: content}, nullTrace);
|
||||||
|
|
||||||
expect(result.context.errors.count).toBe(1);
|
expect(result.context.errors.count).toBe(1);
|
||||||
expect(result.value).toBeUndefined();
|
expect(result.value).toBeUndefined();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import * as templateReader from "../templates/template-reader";
|
|||||||
import {TemplateToken} from "../templates/tokens/template-token";
|
import {TemplateToken} from "../templates/tokens/template-token";
|
||||||
import {TraceWriter} from "../templates/trace-writer";
|
import {TraceWriter} from "../templates/trace-writer";
|
||||||
import {File} from "./file";
|
import {File} from "./file";
|
||||||
|
import {FileProvider} from "./file-provider";
|
||||||
import {WORKFLOW_ROOT} from "./workflow-constants";
|
import {WORKFLOW_ROOT} from "./workflow-constants";
|
||||||
import {getWorkflowSchema} from "./workflow-schema";
|
import {getWorkflowSchema} from "./workflow-schema";
|
||||||
import {YamlObjectReader} from "./yaml-object-reader";
|
import {YamlObjectReader} from "./yaml-object-reader";
|
||||||
@@ -11,15 +12,11 @@ export interface ParseWorkflowResult {
|
|||||||
value: TemplateToken | undefined;
|
value: TemplateToken | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseWorkflow(entryFileName: string, files: File[], trace: TraceWriter): ParseWorkflowResult {
|
export function parseWorkflow(entryFile: File, trace: TraceWriter, fileProvider?: FileProvider): ParseWorkflowResult {
|
||||||
const context = new TemplateContext(new TemplateValidationErrors(), getWorkflowSchema(), trace);
|
const context = new TemplateContext(new TemplateValidationErrors(), getWorkflowSchema(), trace);
|
||||||
|
|
||||||
// Add file ids
|
const fileId = context.getFileId(entryFile.name);
|
||||||
files.forEach(x => context.getFileId(x.name));
|
const reader = new YamlObjectReader(context, fileId, entryFile.content);
|
||||||
|
|
||||||
const fileId = context.getFileId(entryFileName);
|
|
||||||
const fileContent = files[fileId - 1].content;
|
|
||||||
const reader = new YamlObjectReader(context, fileId, fileContent);
|
|
||||||
if (context.errors.count > 0) {
|
if (context.errors.count > 0) {
|
||||||
// The file is not valid YAML, template errors could be misleading
|
// The file is not valid YAML, template errors could be misleading
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -81,13 +81,10 @@ it("YAML errors include range information", () => {
|
|||||||
|
|
||||||
function parseAsWorkflow(content: string): TemplateToken | undefined {
|
function parseAsWorkflow(content: string): TemplateToken | undefined {
|
||||||
const result = parseWorkflow(
|
const result = parseWorkflow(
|
||||||
"test.yaml",
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: "test.yaml",
|
name: "test.yaml",
|
||||||
content: content
|
content: content
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -53,13 +53,10 @@ describe("x-lang tests", () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const parseResult = parseWorkflow(
|
const parseResult = parseWorkflow(
|
||||||
testFileName,
|
|
||||||
[
|
|
||||||
{
|
{
|
||||||
name: testFileName,
|
name: testFileName,
|
||||||
content: testInput
|
content: testInput
|
||||||
}
|
},
|
||||||
],
|
|
||||||
nullTrace
|
nullTrace
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user