MCPcopy Create free account
hub / github.com/0xa3k5/web3icons / validateFilePath

Function validateFilePath

scripts/utils/validate-filepath.ts:12–59  ·  view source on GitHub ↗
(
  filePath: string,
  requiredVariants: TVariant[],
)

Source from the content-addressed store, hash-verified

10 * @returns Object with valid flag and error message if invalid
11 */
12export function validateFilePath(
13 filePath: string,
14 requiredVariants: TVariant[],
15): {
16 valid: boolean
17 error?: string
18 missingVariants?: TVariant[]
19} {
20 // Validate format
21 if (!filePath.includes(':') || filePath.split(':').length !== 2) {
22 return {
23 valid: false,
24 error: `Invalid filePath format: "${filePath}". Expected format: "type:name" (e.g., "network:ethereum")`,
25 }
26 }
27
28 const [svgSourceType, svgFileName] = filePath.split(':') as [TType, string]
29
30 // Validate type
31 const validTypes: TType[] = ['token', 'network', 'wallet', 'exchange']
32 if (!validTypes.includes(svgSourceType)) {
33 return {
34 valid: false,
35 error: `Invalid type in filePath "${filePath}". Type must be one of: ${validTypes.join(', ')}`,
36 }
37 }
38
39 // Check if all required variants exist
40 const svgBaseDir = path.join(SVG_SRC_DIR, `${svgSourceType}s`)
41 const missingVariants: TVariant[] = []
42
43 for (const variant of requiredVariants) {
44 const svgPath = path.join(svgBaseDir, variant, `${svgFileName}.svg`)
45 if (!fs.existsSync(svgPath)) {
46 missingVariants.push(variant)
47 }
48 }
49
50 if (missingVariants.length > 0) {
51 return {
52 valid: false,
53 error: `Missing ${missingVariants.join(', ')} variant(s) for filePath "${filePath}". Expected files: ${missingVariants.map((v) => `${svgBaseDir}/${v}/${svgFileName}.svg`).join(', ')}`,
54 missingVariants,
55 }
56 }
57
58 return { valid: true }
59}
60
61/**
62 * Validates all filePath entries in metadata

Callers 2

validateAllFilePathsFunction · 0.85
getBaseMetadataFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected