import { WorkspaceFolder } from 'vscode-languageserver-protocol'; import { Disposable } from 'vscode-languageserver'; import { GitLabApiClient } from '../../api'; import { FileResolver } from '../fs'; import { DirectoryWalker } from '../fs/dir'; import { GitLabRemote } from '../git/git_remote_parser'; /** * DuoProject is a representation of a Gitlab project with Duo features enabled. * the resulting data can look like this: * [ * { * namespaceWithPath: 'path/to/project', * uri: 'file:///path/to/project/.git/config', * enabled: true, * }, * { * namespaceWithPath: 'path/to/project/nested', * uri: 'file:///path/to/project/nested/.git/config', * enabled: false, * }, * ]; */ export type DuoProject = GitLabRemote & { /** * This is the pointer on the file system to the project. * eg. file:///User/username/gitlab-development-kit/gitlab/.git/config * This should match the `DocumentUri` of the document to check. * * @reference `DocumentUri` is the URI of the document to check. Comes from * the `TextDocument` object. */ uri: string; /** * enabled: true if the project has Duo features enabled */ enabled: boolean; }; type WorkspaceFolderUri = string; export interface GqlProjectWithDuoEnabledInfo { duoFeaturesEnabled: boolean; } export interface DuoProjectAccessCache { getProjectsForWorkspaceFolder(workspaceFolder: WorkspaceFolder): DuoProject[]; updateCache({ baseUrl, workspaceFolders, }: { baseUrl: string; workspaceFolders: WorkspaceFolder[]; }): Promise; onDuoProjectCacheUpdate(listener: () => void): Disposable; } export declare const DuoProjectAccessCache: import("@gitlab-org/di").InterfaceId; export declare class DefaultDuoProjectAccessCache { #private; private readonly directoryWalker; private readonly fileResolver; private readonly api; constructor(directoryWalker: DirectoryWalker, fileResolver: FileResolver, api: GitLabApiClient); getProjectsForWorkspaceFolder(workspaceFolder: WorkspaceFolder): DuoProject[]; updateCache({ baseUrl, workspaceFolders, }: { baseUrl: string; workspaceFolders: WorkspaceFolder[]; }): Promise; onDuoProjectCacheUpdate(listener: (duoProjectsCache: Map) => void): Disposable; } export {};