UNPKG

dop-stick

Version:

Source control tooling for versionable-upgradeable smart contracts

152 lines 5.83 kB
"use strict"; // import { DiamondStandardsConfig } from '../types/config'; // import { Logger as logger } from './logsAndMetrics/core/logger'; // // Define strict types for each standard's functions // type StandardTypes = { // cut: DiamondStandardsConfig['cut']; // loupe: DiamondStandardsConfig['loupe']; // versioning: DiamondStandardsConfig['versioning']; // ownership: DiamondStandardsConfig['ownership']; // emergency: DiamondStandardsConfig['emergency']; // init: DiamondStandardsConfig['init']; // access: DiamondStandardsConfig['access']; // erc165: DiamondStandardsConfig['erc165']; // }; // // Define function names for each standard // type StandardFunctions = { // cut: { diamondCut: string }; // loupe: { // facets: string; // facetSelectors: string; // facetAddresses: string; // facetAddress: string; // }; // versioning: { // getVersion: string; // getVersionHistory: string; // }; // ownership: { // owner: string; // transferOwnership: string; // }; // emergency: { // isPaused: string; // pause: string; // unpause: string; // }; // init: { // init: string; // }; // access: { // hasRole: string; // grantRole: string; // revokeRole: string; // }; // erc165: { // supportsInterface: string; // }; // }; // type StandardTypeGuard<K extends keyof StandardTypes> = // (standard: StandardTypes[K] | undefined) => standard is StandardTypes[K]; // // Helper to safely get function names // export function getStandardFunctionName<K extends keyof StandardTypes>( // standard: StandardTypes[K] | undefined, // standardName: K, // functionName: keyof StandardFunctions[K] // ): string { // if (!standard?.functions) { // throw new Error(`${standardName} standard functions are not configured`); // } // const functions = standard.functions as unknown as StandardFunctions[K]; // const functionValue = functions[functionName]; // if (typeof functionValue !== 'string') { // throw new Error(`${standardName} standard function ${String(functionName)} is not properly configured`); // } // return functionValue; // } // // Safe wrapper with default values // export function safeGetStandardFunction<K extends keyof StandardTypes>( // standard: StandardTypes[K] | undefined, // standardName: K, // functionName: keyof StandardFunctions[K], // defaultValue: string // ): string { // try { // return getStandardFunctionName(standard, standardName, functionName); // } catch (error) { // logger.warning(`Using default value for ${standardName}.${String(functionName)}: ${defaultValue}`); // return defaultValue; // } // } // // Type guards for each standard // export function hasCutFunctions( // standard: StandardTypes['cut'] | undefined // ): standard is NonNullable<StandardTypes['cut']> { // return !!standard?.functions?.diamondCut; // } // export function hasLoupeFunctions( // standard: StandardTypes['loupe'] | undefined // ): standard is NonNullable<StandardTypes['loupe']> { // return !!standard?.functions?.facets && // !!standard?.functions?.facetSelectors && // !!standard?.functions?.facetAddresses && // !!standard?.functions?.facetAddress; // } // export function hasVersioningFunctions( // standard: StandardTypes['versioning'] | undefined // ): standard is NonNullable<StandardTypes['versioning']> { // return !!standard?.enabled && // !!standard?.functions?.getVersion && // !!standard?.functions?.getVersionHistory; // } // export function hasOwnershipFunctions( // standard: StandardTypes['ownership'] | undefined // ): standard is NonNullable<StandardTypes['ownership']> { // return !!standard?.functions?.owner && // !!standard?.functions?.transferOwnership; // } // export function hasEmergencyFunctions( // standard: StandardTypes['emergency'] | undefined // ): standard is NonNullable<StandardTypes['emergency']> { // return !!standard?.enabled && // !!standard?.functions?.isPaused && // !!standard?.functions?.pause && // !!standard?.functions?.unpause; // } // export function hasInitFunctions( // standard: StandardTypes['init'] | undefined // ): standard is NonNullable<StandardTypes['init']> { // return !!standard?.functions?.init; // } // export function hasAccessControlFunctions( // standard: StandardTypes['access'] | undefined // ): standard is NonNullable<StandardTypes['access']> { // return !!standard?.functions?.hasRole && // !!standard?.functions?.grantRole && // !!standard?.functions?.revokeRole; // } // export function hasERC165Functions( // standard: StandardTypes['erc165'] | undefined // ): standard is NonNullable<StandardTypes['erc165']> { // return !!standard?.functions?.supportsInterface; // } // // Type-safe mapping of standards to their type guards // export const standardTypeGuards: { [K in keyof StandardTypes]: StandardTypeGuard<K> } = { // cut: hasCutFunctions, // loupe: hasLoupeFunctions, // versioning: hasVersioningFunctions, // ownership: hasOwnershipFunctions, // emergency: hasEmergencyFunctions, // init: hasInitFunctions, // access: hasAccessControlFunctions, // erc165: hasERC165Functions // } as const; // // Type-safe standard configuration checker // export function isStandardConfigured<K extends keyof StandardTypes>( // standard: StandardTypes[K] | undefined, // standardName: K // ): boolean { // const guard = standardTypeGuards[standardName]; // return guard(standard); // } //# sourceMappingURL=typeGuards.js.map