dop-stick
Version:
Source control tooling for versionable-upgradeable smart contracts
152 lines • 5.83 kB
JavaScript
;
// 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