{"_id":"@domeadev/vite-plugin-export-index","name":"@domeadev/vite-plugin-export-index","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@domeadev/vite-plugin-export-index","version":"0.1.0","description":"A Vite plugin that automatically generates index files with exports for your directories","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"keywords":["vite","plugin","export","index","barrel","typescript","auto-generate","file-watcher"],"author":"","license":"ISC","publishConfig":{"access":"public"},"repository":{"url":"git+https://github.com/domeafavour/vite-plugin-export-index.git"},"devDependencies":{"@types/node":"^24.10.0","tsup":"^8.5.0","tsx":"^4.16.2","typescript":"^5.4.4","vite":"^7.2.1","vitest":"^2.0.0"},"peerDependencies":{"vite":">=5"},"scripts":{"test":"vitest","start":"tsx src/index.ts","dev":"tsx watch src/index.ts","build":"tsup","build:watch":"tsup --watch","build:clean":"rm -rf dist"},"_id":"@domeadev/vite-plugin-export-index@0.1.0","bugs":{"url":"https://github.com/domeafavour/vite-plugin-export-index/issues"},"homepage":"https://github.com/domeafavour/vite-plugin-export-index#readme","_integrity":"sha512-DN7DE1BnvQsXzMemfqYfbXOn4qj58wK+k4Po5C7DvzImTr6+4+wYadJ6vrmhsd4UhSpOz9wnCSqJ2sU99VPAwQ==","_resolved":"/tmp/25ad4d0e4e59da59f5a6102170d747f9/domeadev-vite-plugin-export-index-0.1.0.tgz","_from":"file:domeadev-vite-plugin-export-index-0.1.0.tgz","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-DN7DE1BnvQsXzMemfqYfbXOn4qj58wK+k4Po5C7DvzImTr6+4+wYadJ6vrmhsd4UhSpOz9wnCSqJ2sU99VPAwQ==","shasum":"f81e8efff2c3b21f48b56b8f63ec8229673f5af9","tarball":"https://registry.npmjs.org/@domeadev/vite-plugin-export-index/-/vite-plugin-export-index-0.1.0.tgz","fileCount":18,"unpackedSize":30390,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFx7CAYanHyjF2kE90qRi0SkZxVZ5yGpjz+m5pkdS7L6AiB7tfjFyl4lzaO9dI/SM0xuAItNN15vwOI2nSiqWd/+SQ=="}]},"_npmUser":{"name":"domeafavour","email":"1455123087@qq.com"},"directories":{},"maintainers":[{"name":"domeafavour","email":"1455123087@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vite-plugin-export-index_0.1.0_1762497593960_0.7380614848931644"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-07T06:39:53.887Z","0.1.0":"2025-11-07T06:39:54.146Z","modified":"2025-11-07T06:39:54.402Z"},"maintainers":[{"name":"domeafavour","email":"1455123087@qq.com"}],"description":"A Vite plugin that automatically generates index files with exports for your directories","homepage":"https://github.com/domeafavour/vite-plugin-export-index#readme","keywords":["vite","plugin","export","index","barrel","typescript","auto-generate","file-watcher"],"repository":{"url":"git+https://github.com/domeafavour/vite-plugin-export-index.git"},"bugs":{"url":"https://github.com/domeafavour/vite-plugin-export-index/issues"},"license":"ISC","readme":"# vite-plugin-export-index\n\nA Vite plugin that automatically generates index files with exports for your directories. This plugin watches specified directories and automatically creates/updates index.ts files with export statements based on the files in those directories.\n\n## Features\n\n- 🚀 **Automatic Generation**: Automatically generates index.ts files with exports\n- 👀 **File Watching**: Watches for file changes and updates exports in real-time during development\n- 🎨 **Customizable**: Flexible resolver functions to control export generation\n- 📝 **Custom Banners**: Add custom headers to generated files\n- 🔧 **TypeScript Support**: Full TypeScript support with proper type definitions\n\n## Installation\n\n### npm\n\n```bash\nnpm install @domeadev/vite-plugin-export-index\n```\n\n### pnpm\n\n```bash\npnpm add @domeadev/vite-plugin-export-index\n```\n\n### yarn\n\n```bash\nyarn add @domeadev/vite-plugin-export-index\n```\n\n## Usage\n\n### Basic Setup\n\nAdd the plugin to your `vite.config.ts`:\n\n```typescript\nimport { defineConfig } from \"vite\";\nimport { exportIndex } from \"@domeadev/vite-plugin-export-index\";\n\nexport default defineConfig({\n  plugins: [\n    exportIndex({\n      options: [\n        {\n          dir: \"src/components\",\n          resolver: ({ basename, extname }) => {\n            if (extname === \"tsx\" || extname === \"ts\") {\n              return `export { default as ${basename} } from './${basename}';`;\n            }\n            return null;\n          },\n        },\n      ],\n    }),\n  ],\n});\n```\n\n### Advanced Configuration\n\n```typescript\nimport { defineConfig } from \"vite\";\nimport {\n  exportIndex,\n  defineResolver,\n} from \"@domeadev/vite-plugin-export-index\";\n\nconst componentResolver = defineResolver(({ basename, extname, name }) => {\n  // Skip non-TypeScript files\n  if (![\"ts\", \"tsx\"].includes(extname)) return null;\n\n  // Skip test files\n  if (basename.includes(\".test\") || basename.includes(\".spec\")) return null;\n\n  // Generate named exports for components\n  if (extname === \"tsx\") {\n    return `export { default as ${basename} } from './${basename}';`;\n  }\n\n  // Generate barrel exports for utilities\n  if (extname === \"ts\") {\n    return `export * from './${basename}';`;\n  }\n\n  return null;\n});\n\nexport default defineConfig({\n  plugins: [\n    exportIndex({\n      options: [\n        {\n          dir: \"src/components\",\n          dest: \"src/components/index.ts\", // Optional: custom destination\n          banner:\n            \"// Components barrel export\\n// Auto-generated - do not edit manually\\n\\n\",\n          resolver: componentResolver,\n        },\n        {\n          dir: \"src/utils\",\n          resolver: ({ basename, extname }) => {\n            if (extname === \"ts\") {\n              return `export * from './${basename}';`;\n            }\n            return null;\n          },\n        },\n      ],\n      showLogs: true, // Enable/disable logging (default: true)\n    }),\n  ],\n});\n```\n\n## API Reference\n\n### `exportIndex(config)`\n\nMain plugin function.\n\n#### Parameters\n\n- `config.options` - Array of export options\n- `config.showLogs` - Whether to show logs (default: `true`)\n\n### `ExportOption`\n\nConfiguration for each directory to watch:\n\n```typescript\ninterface ExportOption {\n  /** Custom banner/header for the generated file */\n  banner?: string;\n\n  /** Directory to watch for files */\n  dir: string;\n\n  /** Destination file path (default: `${dir}/index.ts`) */\n  dest?: string;\n\n  /** Function to resolve export statements for each file */\n  resolver: (variables: {\n    /** Relative directory path from src */\n    dir: string;\n    /** Full filename with extension */\n    name: string;\n    /** Filename without extension */\n    basename: string;\n    /** File extension without dot */\n    extname: string;\n  }) => string | null | undefined | false;\n}\n```\n\n### `defineResolver(resolver)`\n\nHelper function for better TypeScript support when defining resolvers.\n\n## Examples\n\n### React Components\n\n```typescript\n{\n  dir: 'src/components',\n  resolver: ({ basename, extname }) => {\n    if (extname === 'tsx') {\n      return `export { default as ${basename} } from './${basename}';`\n    }\n    return null\n  }\n}\n```\n\n### Utility Functions\n\n```typescript\n{\n  dir: 'src/utils',\n  resolver: ({ basename, extname }) => {\n    if (extname === 'ts' && !basename.includes('.test')) {\n      return `export * from './${basename}';`\n    }\n    return null\n  }\n}\n```\n\n### Custom Types\n\n```typescript\n{\n  dir: 'src/types',\n  resolver: ({ basename, extname }) => {\n    if (extname === 'ts') {\n      return `export type * from './${basename}';`\n    }\n    return null\n  }\n}\n```\n\n## How It Works\n\n1. **Directory Watching**: The plugin watches specified directories for file changes\n2. **File Analysis**: When files are added/removed, the resolver function is called for each file\n3. **Export Generation**: The resolver determines what export statement to generate (or skip)\n4. **Index File Update**: The plugin writes all export statements to the index file\n5. **Real-time Updates**: During development, changes trigger automatic regeneration\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-9cb7c49c5311b3ec6d766c4617aac9d1"}