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

47 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";
import { CompletionConfig } from "../complete";
const parsedWorkflowCache = new Map<string, ParseWorkflowResult>();
const workflowTemplateCache = new Map<string, WorkflowTemplate>();
export function clearParsedCacheEntry(uri: string) {
parsedWorkflowCache.delete(uri);
}
export function clearParsedCache() {
parsedWorkflowCache.clear();
}
export function clearWorkflowTemplateCacheEntry(uri: string) {
workflowTemplateCache.delete(uri);
}
export function clearWorkflowTemplateCache() {
workflowTemplateCache.clear();
}
2023-03-03 12:39:40 -08:00
export function fetchOrParseWorkflow(file: File, uri: string): ParseWorkflowResult | undefined {
let result = parsedWorkflowCache.get(uri);
2023-03-03 12:28:29 -08:00
if (!result || !result.value) {
result = parseWorkflow(file, nullTrace);
if (!result.value) {
return undefined;
}
2023-03-03 12:39:40 -08:00
parsedWorkflowCache.set(uri, result);
2023-03-03 12:28:29 -08:00
}
return result;
}
2023-03-03 12:39:40 -08:00
export async function fetchOrConvertWorkflowTemplate(file: File, parsedWorkflow: ParseWorkflowResult, uri: string, config?: CompletionConfig, options?: WorkflowTemplateConverterOptions): Promise<WorkflowTemplate> {
let template = workflowTemplateCache.get(uri);
2023-03-03 12:28:29 -08:00
if (!template) {
template = await convertWorkflowTemplate(file.name, parsedWorkflow.context, parsedWorkflow.value!, 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;
}