UNPKG

deepsource-mcp-server

Version:
180 lines (179 loc) 6.43 kB
/** * @fileoverview Branded types for the DeepSource MCP server * * This module defines branded types to enforce type safety for string-based identifiers. * Branded types help prevent mixing different string identifiers that share the same primitive type. * For example, a ProjectKey and RunId are both strings, but they represent different concepts. * Using branded types ensures that functions expecting a ProjectKey cannot accept a RunId. */ /** * A branded type for DeepSource project keys */ export type ProjectKey = string & { readonly __brand: 'ProjectKey'; }; /** * A branded type for DeepSource run identifiers (UUID) */ export type RunId = string & { readonly __brand: 'RunId'; }; /** * A branded type for commit hashes (SHA) */ export type CommitOid = string & { readonly __brand: 'CommitOid'; }; /** * A branded type for repository branch names */ export type BranchName = string & { readonly __brand: 'BranchName'; }; /** * A branded type for analyzer shortcodes */ export type AnalyzerShortcode = string & { readonly __brand: 'AnalyzerShortcode'; }; /** * A branded type for internal GraphQL node IDs */ export type GraphQLNodeId = string & { readonly __brand: 'GraphQLNodeId'; }; /** * Type guard functions to safely assert branded types */ /** * Converts a string to a ProjectKey branded type * * This helper function safely converts a regular string to the ProjectKey branded type. * ProjectKey is used to type-safely represent DeepSource project identifiers throughout * the codebase, ensuring they cannot be accidentally mixed with other string identifiers. * * @example * ```typescript * // Convert a project ID string to a branded type * const projectKey = asProjectKey('abc123'); * * // Use with a function requiring ProjectKey parameter * const project = getProjectDetails(projectKey); // Type-safe * * // This would cause a compile error: * const runId = asRunId('xyz789'); * getProjectDetails(runId); // Error: Type 'RunId' is not assignable to type 'ProjectKey' * ``` * * @param value - The string to convert to a ProjectKey * @returns The same string, but with the ProjectKey branded type * @public */ export declare function asProjectKey(value: string): ProjectKey; /** * Converts a string to a RunId branded type * * This helper function safely converts a regular string to the RunId branded type. * RunId is used to type-safely represent DeepSource analysis run identifiers (UUIDs) * throughout the codebase, ensuring they cannot be accidentally mixed with other identifiers. * * @example * ```typescript * // Convert a run UUID string to a branded type * const runId = asRunId('61c38bcc-c546-4694-be79-123456789abc'); * * // Use with a function requiring RunId parameter * const run = getRunDetails(runId); // Type-safe * ``` * * @param value - The string to convert to a RunId * @returns The same string, but with the RunId branded type * @public */ export declare function asRunId(value: string): RunId; /** * Converts a string to a CommitOid branded type * * This helper function safely converts a regular string to the CommitOid branded type. * CommitOid is used to type-safely represent git commit hashes throughout the codebase, * ensuring they cannot be accidentally mixed with other string identifiers. * * @example * ```typescript * // Convert a commit hash string to a branded type * const commitOid = asCommitOid('6a8e94c82f948d6f2932e905e83fe60166a1c70a'); * * // Use with a function requiring CommitOid parameter * const commitDetails = getCommitDetails(commitOid); // Type-safe * ``` * * @param value - The string to convert to a CommitOid * @returns The same string, but with the CommitOid branded type * @public */ export declare function asCommitOid(value: string): CommitOid; /** * Converts a string to a BranchName branded type * * This helper function safely converts a regular string to the BranchName branded type. * BranchName is used to type-safely represent git branch names throughout the codebase, * ensuring they cannot be accidentally mixed with other string identifiers. * * @example * ```typescript * // Convert a branch name string to a branded type * const branchName = asBranchName('feature/add-new-metrics'); * * // Use with a function requiring BranchName parameter * const branchDetails = getBranchDetails(branchName); // Type-safe * ``` * * @param value - The string to convert to a BranchName * @returns The same string, but with the BranchName branded type * @public */ export declare function asBranchName(value: string): BranchName; /** * Converts a string to an AnalyzerShortcode branded type * * This helper function safely converts a regular string to the AnalyzerShortcode branded type. * AnalyzerShortcode is used to type-safely represent DeepSource analyzer identifiers * (like "python", "javascript", etc.) throughout the codebase, ensuring they cannot * be accidentally mixed with other string identifiers. * * @example * ```typescript * // Convert an analyzer code string to a branded type * const analyzerCode = asAnalyzerShortcode('python'); * * // Use with a function requiring AnalyzerShortcode parameter * const analyzerDetails = getAnalyzerDetails(analyzerCode); // Type-safe * ``` * * @param value - The string to convert to an AnalyzerShortcode * @returns The same string, but with the AnalyzerShortcode branded type * @public */ export declare function asAnalyzerShortcode(value: string): AnalyzerShortcode; /** * Converts a string to a GraphQLNodeId branded type * * This helper function safely converts a regular string to the GraphQLNodeId branded type. * GraphQLNodeId is used to type-safely represent internal GraphQL node identifiers * throughout the codebase, ensuring they cannot be accidentally mixed with other identifiers. * These IDs are typically used with the Relay-style GraphQL interface. * * @example * ```typescript * // Convert a GraphQL node ID string to a branded type * const nodeId = asGraphQLNodeId('QWNjb3VudDoxMjM0NQ=='); * * // Use with a function requiring GraphQLNodeId parameter * const node = getNodeById(nodeId); // Type-safe * ``` * * @param value - The string to convert to a GraphQLNodeId * @returns The same string, but with the GraphQLNodeId branded type * @public */ export declare function asGraphQLNodeId(value: string): GraphQLNodeId;