Files
languageservices/languageservice/src/utils/workflow-cache.ts
T

51 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-03-03 12:28:29 -08:00
import {convertWorkflowTemplate, parseWorkflow} from "@github/actions-workflow-parser";
import {WorkflowTemplateConverterOptions} from "@github/actions-workflow-parser/model/convert";
import {File} from "@github/actions-workflow-parser/workflows/file";
import {ParseWorkflowResult} from "@github/actions-workflow-parser";
import {WorkflowTemplate} from "@github/actions-workflow-parser";
import {nullTrace} from "../nulltrace";
2023-03-03 12:49:25 -08:00
import {CompletionConfig} from "../complete";
2023-03-03 12:28:29 -08:00
const parsedWorkflowCache = new Map<string, ParseWorkflowResult>();
const workflowTemplateCache = new Map<string, WorkflowTemplate>();
2023-03-06 15:16:26 -08:00
export function clearCacheEntry(uri: string) {
2023-03-03 12:28:29 -08:00
parsedWorkflowCache.delete(uri);
workflowTemplateCache.delete(uri);
}
2023-03-06 15:16:26 -08:00
export function clearCache() {
parsedWorkflowCache.clear();
2023-03-03 12:28:29 -08:00
workflowTemplateCache.clear();
}
2023-03-03 12:39:40 -08:00
export function fetchOrParseWorkflow(file: File, uri: string): ParseWorkflowResult | undefined {
2023-03-14 11:43:28 -04:00
const cachedResult = parsedWorkflowCache.get(uri);
if (cachedResult) {
return cachedResult;
2023-03-03 12:28:29 -08:00
}
2023-03-14 11:43:28 -04:00
const result = parseWorkflow(file, nullTrace);
parsedWorkflowCache.set(uri, result);
2023-03-03 12:28:29 -08:00
return result;
}
2023-03-03 12:49:25 -08:00
export async function fetchOrConvertWorkflowTemplate(
parsedWorkflow: ParseWorkflowResult,
uri: string,
config?: CompletionConfig,
options?: WorkflowTemplateConverterOptions
): Promise<WorkflowTemplate> {
2023-03-03 12:39:40 -08:00
let template = workflowTemplateCache.get(uri);
2023-03-03 12:28:29 -08:00
if (!template) {
2023-03-03 12:49:25 -08:00
template = await convertWorkflowTemplate(
parsedWorkflow.context,
2023-03-15 16:52:56 -04:00
// TODO: @joshmgross We can't assume that the value is non-null here
parsedWorkflow.value!, // eslint-disable-line @typescript-eslint/no-non-null-assertion
2023-03-03 12:49:25 -08:00
config?.fileProvider,
options
);
2023-03-03 12:39:40 -08:00
workflowTemplateCache.set(uri, template);
2023-03-03 12:28:29 -08:00
}
return template;
2023-03-03 12:49:25 -08:00
}