react-material-vscode-icons
Version:
React components for VSCode Material Icon Theme - file and folder icons for your React applications
1 lines β’ 26.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/generator.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { mkdir, readdir, readFile, rm, writeFile } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport { basename, join } from 'path';\nimport { spawn } from 'child_process';\n\ninterface IconMapping {\n iconDefinitions: Record<string, { iconPath: string }>;\n file: string;\n folder: string;\n folderExpanded: string;\n fileExtensions: Record<string, string>;\n fileNames: Record<string, string>;\n folderNames: Record<string, string>;\n folderNamesExpanded?: Record<string, string>;\n}\n\nconst REPO_URL =\n 'https://github.com/material-extensions/vscode-material-icon-theme.git';\nconst OUTPUT_DIR = './src/icons';\nconst MAPPING_FILE = './src/fileIconMapping.ts';\n\nasync function cloneRepository(): Promise<string> {\n console.log('π₯ Cloning Material Icon Theme repository...');\n\n // Create temporary directory\n const tempDir = join(tmpdir(), `material-icons-${Date.now()}`);\n await mkdir(tempDir, { recursive: true });\n\n // Clone the repository\n const proc = spawn('git', ['clone', '--depth', '1', REPO_URL, tempDir], {\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n return new Promise((resolve, reject) => {\n let stderr = '';\n\n proc.stderr?.on('data', data => {\n stderr += data.toString();\n });\n\n proc.on('close', code => {\n if (code !== 0) {\n reject(new Error(`Failed to clone repository: ${stderr}`));\n } else {\n console.log(`β
Repository cloned to ${tempDir}`);\n resolve(tempDir);\n }\n });\n });\n}\n\nasync function generateIconComponents(iconsSourceDir: string) {\n console.log('π¨ Generating file icon components...');\n\n // Ensure output directory exists\n await mkdir(OUTPUT_DIR, { recursive: true });\n\n // Read all SVG files\n const svgFiles = await readdir(iconsSourceDir);\n const svgIcons = svgFiles.filter(file => file.endsWith('.svg'));\n\n // Generate React components for each icon\n const componentExports: string[] = [];\n const generatedIcons: string[] = [];\n\n for (const svgFile of svgIcons) {\n const iconName = basename(svgFile, '.svg');\n const componentName = toPascalCase(iconName);\n\n // Read SVG content\n const svgContent = await readFile(join(iconsSourceDir, svgFile), 'utf-8');\n\n // Convert SVG to React component\n const component = generateReactComponent(componentName, svgContent);\n\n // Write component file\n await writeFile(join(OUTPUT_DIR, `${componentName}.tsx`), component);\n\n componentExports.push(\n `export { ${componentName} } from './${componentName}'`\n );\n\n // Track generated icons for mapping\n generatedIcons.push(componentName);\n\n console.log(`β
Generated ${componentName}.tsx`);\n }\n\n // Generate index file\n const indexContent = componentExports.join('\\n') + '\\n';\n await writeFile(join(OUTPUT_DIR, 'index.ts'), indexContent);\n\n console.log(`π― Generated ${svgIcons.length} icon components`);\n\n return generatedIcons;\n}\n\nfunction generateReactComponent(\n componentName: string,\n svgContent: string\n): string {\n // Special handling for React icon\n if (componentName === 'React') {\n componentName = 'ReactIcon';\n }\n\n // Clean up SVG content for React\n let cleanSvg = svgContent\n .replace(/class=/g, 'className=')\n .replace(/fill-rule=/g, 'fillRule=')\n .replace(/clip-rule=/g, 'clipRule=')\n .replace(/stroke-width=/g, 'strokeWidth=')\n .replace(/stroke-linecap=/g, 'strokeLinecap=')\n .replace(/stroke-linejoin=/g, 'strokeLinejoin=')\n .replace(/stop-color=/g, 'stopColor=')\n .replace(/xml:space=/g, 'xmlSpace=')\n .replace(/xmlns:xlink=\"[^\"]*\"/g, '') // Remove xmlns:xlink\n .replace(/<svg[^>]*>/, match =>\n match.replace(/width=\"[^\"]*\"/, '').replace(/height=\"[^\"]*\"/, '')\n );\n\n // Remove any existing className attributes from the SVG tag to avoid duplicates\n cleanSvg = cleanSvg.replace(/<svg([^>]*)>/, (_match, attributes) => {\n const cleanAttributes = attributes\n .replace(/className=\"[^\"]*\"/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n return `<svg${cleanAttributes ? ' ' + cleanAttributes : ''}>`;\n });\n\n // Remove problematic class attributes that aren't valid Tailwind classes\n cleanSvg = cleanSvg\n .replace(/className=\"prefix__prefix__[^\"]*\"/g, '')\n .replace(/className=\"cls-\\d+\"/g, '')\n .replace(/className=\"color[a-f0-9]+\"/g, '')\n .replace(/className=\"svgShape\"/g, '');\n\n return `import * as React from \"react\";\n\nexport function ${componentName}(props: React.SVGProps<SVGSVGElement>) {\n return (\n ${cleanSvg.replace('<svg', `<svg width={16} height={16} {...props} className=\"@${componentName}\"`)}\n )\n}\n`;\n}\n\nfunction toPascalCase(str: string): string {\n let result = str\n .split(/[-_]/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n\n // If the component name starts with a number, prefix it with 'Icon'\n if (/^\\d/.test(result)) {\n result = 'Icon' + result;\n }\n\n return result;\n}\n\n// Generate the file mapping configuration\nasync function generateFileMapping(generatedIcons: string[]) {\n console.log('πΊοΈ Generating file icon mapping...');\n\n // Helper function to find icon by name (case-insensitive)\n const findIcon = (name: string): string => {\n const variations = [\n name,\n name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(),\n name.toUpperCase(),\n name.toLowerCase(),\n `${name.charAt(0).toUpperCase() + name.slice(1).toLowerCase()}Icon`,\n `Icon${name.charAt(0).toUpperCase() + name.slice(1).toLowerCase()}`,\n ];\n\n for (const variation of variations) {\n if (generatedIcons.includes(variation)) {\n return variation;\n }\n }\n return 'Document'; // fallback\n };\n\n const mapping: IconMapping = {\n iconDefinitions: {\n // Default icons\n file: { iconPath: 'Document' },\n folder: { iconPath: 'FolderBase' },\n 'folder-open': { iconPath: 'FolderBaseOpen' },\n\n // Programming languages\n javascript: { iconPath: findIcon('javascript') },\n typescript: { iconPath: findIcon('typescript') },\n python: { iconPath: findIcon('python') },\n java: { iconPath: findIcon('java') },\n csharp: { iconPath: findIcon('csharp') },\n cpp: { iconPath: findIcon('cpp') },\n c: { iconPath: findIcon('c') },\n go: { iconPath: findIcon('go') },\n rust: { iconPath: findIcon('rust') },\n php: { iconPath: findIcon('php') },\n ruby: { iconPath: findIcon('ruby') },\n kotlin: { iconPath: findIcon('kotlin') },\n swift: { iconPath: findIcon('swift') },\n dart: { iconPath: findIcon('dart') },\n scala: { iconPath: findIcon('scala') },\n haskell: { iconPath: findIcon('haskell') },\n lua: { iconPath: findIcon('lua') },\n r: { iconPath: findIcon('r') },\n\n // Web technologies\n html: { iconPath: findIcon('html') },\n css: { iconPath: findIcon('css') },\n scss: { iconPath: findIcon('sass') },\n sass: { iconPath: findIcon('sass') },\n less: { iconPath: findIcon('less') },\n stylus: { iconPath: findIcon('stylus') },\n json: { iconPath: findIcon('json') },\n xml: { iconPath: findIcon('xml') },\n yaml: { iconPath: findIcon('yaml') },\n toml: { iconPath: findIcon('toml') },\n\n // Frameworks & Libraries\n react: { iconPath: 'ReactIcon' },\n vue: { iconPath: findIcon('vue') },\n angular: { iconPath: findIcon('angular') },\n svelte: { iconPath: findIcon('svelte') },\n next: { iconPath: findIcon('next') },\n nuxt: { iconPath: findIcon('nuxt') },\n gatsby: { iconPath: findIcon('gatsby') },\n astro: { iconPath: findIcon('astro') },\n\n // Build tools & configs\n webpack: { iconPath: findIcon('webpack') },\n vite: { iconPath: findIcon('vite') },\n rollup: { iconPath: findIcon('rollup') },\n parcel: { iconPath: findIcon('parcel') },\n babel: { iconPath: findIcon('babel') },\n eslint: { iconPath: findIcon('eslint') },\n prettier: { iconPath: findIcon('prettier') },\n jest: { iconPath: findIcon('jest') },\n vitest: { iconPath: findIcon('vitest') },\n\n // Package managers\n npm: { iconPath: findIcon('npm') },\n yarn: { iconPath: findIcon('yarn') },\n pnpm: { iconPath: findIcon('pnpm') },\n bun: { iconPath: findIcon('bun') },\n\n // Version control\n git: { iconPath: findIcon('git') },\n github: { iconPath: findIcon('github') },\n gitlab: { iconPath: findIcon('gitlab') },\n\n // Documentation\n markdown: { iconPath: findIcon('markdown') },\n readme: { iconPath: findIcon('readme') },\n license: { iconPath: findIcon('license') },\n\n // Database\n database: { iconPath: findIcon('database') },\n sql: { iconPath: findIcon('database') },\n\n // Docker & DevOps\n docker: { iconPath: findIcon('docker') },\n kubernetes: { iconPath: findIcon('kubernetes') },\n terraform: { iconPath: findIcon('terraform') },\n\n // Folders\n 'folder-src': { iconPath: 'FolderSrc' },\n 'folder-test': { iconPath: 'FolderTest' },\n 'folder-docs': { iconPath: 'FolderDocs' },\n 'folder-assets': { iconPath: findIcon('folderassets') },\n 'folder-components': { iconPath: 'FolderComponents' },\n 'folder-utils': { iconPath: 'FolderUtils' },\n 'folder-hooks': { iconPath: findIcon('folderhooks') },\n 'folder-api': { iconPath: 'FolderApi' },\n 'folder-config': { iconPath: 'FolderConfig' },\n 'folder-node': { iconPath: 'FolderNode' },\n },\n\n file: 'file',\n folder: 'folder',\n folderExpanded: 'folder-open',\n\n fileExtensions: {\n // JavaScript & TypeScript\n js: 'javascript',\n jsx: 'react',\n ts: 'typescript',\n tsx: 'react',\n mjs: 'javascript',\n cjs: 'javascript',\n\n // Python\n py: 'python',\n pyw: 'python',\n pyx: 'python',\n\n // Web\n html: 'html',\n htm: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'scss',\n less: 'less',\n\n // Data formats\n json: 'json',\n json5: 'json',\n jsonc: 'json',\n xml: 'xml',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'yaml',\n\n // Documentation\n md: 'markdown',\n mdx: 'markdown',\n rst: 'markdown',\n\n // Other languages\n java: 'java',\n kt: 'kotlin',\n kts: 'kotlin',\n cs: 'csharp',\n cpp: 'cpp',\n cxx: 'cpp',\n cc: 'cpp',\n c: 'c',\n h: 'c',\n hpp: 'cpp',\n go: 'go',\n rs: 'rust',\n php: 'php',\n rb: 'ruby',\n swift: 'swift',\n dart: 'dart',\n scala: 'scala',\n hs: 'haskell',\n lua: 'lua',\n r: 'r',\n vue: 'vue',\n svelte: 'svelte',\n\n // Additional web extensions\n astro: 'astro',\n\n // Config files\n ini: 'yaml',\n conf: 'yaml',\n\n // Database\n sql: 'database',\n sqlite: 'database',\n db: 'database',\n\n // Docker\n dockerfile: 'docker',\n },\n\n fileNames: {\n // Package managers\n 'package.json': 'npm',\n 'package-lock.json': 'npm',\n 'yarn.lock': 'yarn',\n 'pnpm-lock.yaml': 'pnpm',\n 'bun.lockb': 'npm',\n\n // Build tools\n 'webpack.config.js': 'webpack',\n 'vite.config.ts': 'vite',\n 'vite.config.js': 'vite',\n 'rollup.config.js': 'rollup',\n '.babelrc': 'babel',\n 'babel.config.js': 'babel',\n\n // Linting & formatting\n '.eslintrc.js': 'eslint',\n '.eslintrc.json': 'eslint',\n 'eslint.config.js': 'eslint',\n '.prettierrc': 'prettier',\n 'prettier.config.js': 'prettier',\n\n // Version control\n '.gitignore': 'git',\n '.gitattributes': 'git',\n '.gitmodules': 'git',\n\n // Documentation\n 'README.md': 'readme',\n 'README.txt': 'readme',\n LICENSE: 'license',\n 'LICENSE.md': 'license',\n 'CHANGELOG.md': 'markdown',\n\n // TypeScript\n 'tsconfig.json': 'typescript',\n 'tsconfig.node.json': 'typescript',\n\n // Environment\n '.env': 'yaml',\n '.env.local': 'yaml',\n '.env.development': 'yaml',\n '.env.production': 'yaml',\n\n // Docker\n Dockerfile: 'docker',\n 'docker-compose.yml': 'docker',\n 'docker-compose.yaml': 'docker',\n\n // CI/CD\n '.github': 'github',\n '.gitlab-ci.yml': 'gitlab',\n\n // More configs\n 'next.config.js': 'next',\n 'nuxt.config.js': 'nuxt',\n 'astro.config.mjs': 'astro',\n 'jest.config.js': 'jest',\n 'vitest.config.ts': 'vitest',\n },\n\n folderNames: {\n // Source folders\n src: 'folder-src',\n source: 'folder-src',\n lib: 'folder-src',\n\n // Test folders\n test: 'folder-test',\n tests: 'folder-test',\n __tests__: 'folder-test',\n spec: 'folder-test',\n specs: 'folder-test',\n\n // Documentation\n docs: 'folder-docs',\n doc: 'folder-docs',\n documentation: 'folder-docs',\n\n // Assets\n assets: 'folder-assets',\n static: 'folder-assets',\n public: 'folder-assets',\n images: 'folder-assets',\n img: 'folder-assets',\n\n // Components\n components: 'folder-components',\n component: 'folder-components',\n\n // Utilities\n utils: 'folder-utils',\n utilities: 'folder-utils',\n helpers: 'folder-utils',\n\n // Hooks\n hooks: 'folder-hooks',\n hook: 'folder-hooks',\n\n // API\n api: 'folder-api',\n apis: 'folder-api',\n services: 'folder-api',\n service: 'folder-api',\n\n // Config\n config: 'folder-config',\n configs: 'folder-config',\n configuration: 'folder-config',\n\n // Dependencies\n node_modules: 'folder-node',\n '.git': 'git',\n },\n };\n\n const mappingContent = `// Auto-generated file icon mapping\n// Based on VSCode Material Icon Theme patterns\n\nexport interface IconDefinition {\n iconPath: string\n}\n\nexport interface FileIconMapping {\n iconDefinitions: Record<string, IconDefinition>\n file: string\n folder: string\n folderExpanded: string\n fileExtensions: Record<string, string>\n fileNames: Record<string, string>\n folderNames: Record<string, string>\n folderNamesExpanded?: Record<string, string>\n}\n\nexport const fileIconMapping: FileIconMapping = ${JSON.stringify(mapping, null, 2)}\n\n// Helper function to get icon for a file\nexport function getFileIcon(fileName: string): string {\n const mapping = fileIconMapping\n \n // Check exact file name match first\n if (mapping.fileNames[fileName]) {\n return mapping.iconDefinitions[mapping.fileNames[fileName]]?.iconPath || mapping.file\n }\n \n // Check file extension\n const ext = fileName.split('.').pop()?.toLowerCase()\n if (ext && mapping.fileExtensions[ext]) {\n return mapping.iconDefinitions[mapping.fileExtensions[ext]]?.iconPath || mapping.file\n }\n \n // Default file icon\n return mapping.iconDefinitions[mapping.file]?.iconPath || 'FileIcon'\n}\n\n// Helper function to get icon for a folder\nexport function getFolderIcon(folderName: string, isExpanded = false): string {\n const mapping = fileIconMapping\n \n // Check folder name match\n if (mapping.folderNames[folderName]) {\n const iconKey = isExpanded && mapping.folderNamesExpanded?.[folderName] \n ? mapping.folderNamesExpanded[folderName]\n : mapping.folderNames[folderName]\n return mapping.iconDefinitions[iconKey]?.iconPath || (isExpanded ? mapping.folderExpanded : mapping.folder)\n }\n \n // Default folder icon\n const defaultKey = isExpanded ? mapping.folderExpanded : mapping.folder\n return mapping.iconDefinitions[defaultKey]?.iconPath || (isExpanded ? 'FolderOpenIcon' : 'FolderIcon')\n}\n`;\n\n await writeFile(MAPPING_FILE, mappingContent);\n console.log('β
Generated file icon mapping');\n}\n\nasync function cleanupTempDir(tempDir: string) {\n try {\n console.log('π§Ή Cleaning up temporary directory...');\n await rm(tempDir, { recursive: true, force: true });\n console.log('β
Temporary directory cleaned up');\n } catch (error) {\n console.warn(`β οΈ Failed to cleanup temp directory: ${String(error)}`);\n }\n}\n\n// Main execution\nasync function main() {\n let tempDir: string | null = null;\n\n try {\n // Clone repository to temp directory\n tempDir = await cloneRepository();\n\n // Find the icons directory in the cloned repository\n const iconsSourceDir = join(tempDir, 'icons');\n\n // Generate components and mapping\n const generatedIcons = await generateIconComponents(iconsSourceDir);\n await generateFileMapping(generatedIcons);\n\n console.log('π File icon system generated successfully!');\n console.log('\\nπ Usage:');\n console.log('import { FileIcon } from \"react-material-vscode-icons\"');\n console.log(\n 'import { getFileIcon, getFolderIcon } from \"react-material-vscode-icons\"'\n );\n } catch (error) {\n console.error('β Error generating file icons:', error);\n process.exit(1);\n } finally {\n // Always cleanup temp directory\n if (tempDir) {\n await cleanupTempDir(tempDir);\n }\n }\n}\n\nif (require.main === module) {\n main();\n}\n\nexport { main as generateIcons };\n"],"mappings":"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","names":[]}