{"_id":"@arcmantle/vite-lib-config","_rev":"4-4b8b566236dcb316372552bef7d210b0","name":"@arcmantle/vite-lib-config","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@arcmantle/vite-lib-config","version":"1.0.0","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-lib-config@1.0.0","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"dist":{"shasum":"46e1f828b2e7633887d46314227f50231c2083be","tarball":"https://registry.npmjs.org/@arcmantle/vite-lib-config/-/vite-lib-config-1.0.0.tgz","fileCount":8,"integrity":"sha512-RxwJTTmnylw6ileCLzWQ0MJqOldvW8Fc8CAa8keexehh1MtbwzlolrAFMeUV/3mV0x6aZ9iY/qYW3sl128besw==","signatures":[{"sig":"MEYCIQCvyQsCwlG7O//drdX3/I/duFNGlF4C7MaA86vRyGNyqwIhAJTsRhwVISXQ6+j9Q+EzZlPTu5KwO1+gbJVmk6sJPrxq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18367},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-lib-config-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","actor":{"name":"roenlie","type":"user","email":"kristofferroenlie@gmail.com"},"email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/1791fa5301aa60a6544fe085e3efd4f9/arcmantle-vite-lib-config-1.0.0.tgz","_integrity":"sha512-RxwJTTmnylw6ileCLzWQ0MJqOldvW8Fc8CAa8keexehh1MtbwzlolrAFMeUV/3mV0x6aZ9iY/qYW3sl128besw==","_npmVersion":"11.4.2","description":"Library configuration for vite","directories":{},"_nodeVersion":"24.3.0","dependencies":{"deepmerge-ts":"^7.1.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@arcmantle/tsconfig":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/vite-lib-config_1.0.0_1751755244459_0.5402769540401156","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arcmantle/vite-lib-config","version":"1.0.1","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-lib-config@1.0.1","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"dist":{"shasum":"458b465f7bac73657d8e587bea6301dc9c9f39ec","tarball":"https://registry.npmjs.org/@arcmantle/vite-lib-config/-/vite-lib-config-1.0.1.tgz","fileCount":8,"integrity":"sha512-mmR/0qay/6DMotlgbtlFtem49S+w6Y4Q16VYUd9ICWCG7RlFtBhysCh7uFG+rVRsFDGtUdDzS3BlcaUxvBZysg==","signatures":[{"sig":"MEYCIQCBayTRv40dpAy4B0fxaWmEkphhfm+XDrbEfoblzuhWnwIhAPa0fJi9Wet/Blke+4R5V6MpPlHTdVAIjIZakvX+UQBv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18349},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-lib-config-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/807f8150c88a03be22f1e72b3a005f86/arcmantle-vite-lib-config-1.0.1.tgz","_integrity":"sha512-mmR/0qay/6DMotlgbtlFtem49S+w6Y4Q16VYUd9ICWCG7RlFtBhysCh7uFG+rVRsFDGtUdDzS3BlcaUxvBZysg==","_npmVersion":"11.4.2","description":"Library configuration for vite","directories":{},"_nodeVersion":"24.4.1","dependencies":{"deepmerge-ts":"^7.1.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.14","@arcmantle/tsconfig":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/vite-lib-config_1.0.1_1752757864725_0.4829660460058198","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@arcmantle/vite-lib-config","version":"1.0.2","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-lib-config@1.0.2","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"homepage":"https://github.com/arcmantle/vite-lib-config#readme","bugs":{"url":"https://github.com/arcmantle/vite-lib-config/issues"},"dist":{"shasum":"7ce84387bdf4506cfaedea276b003e5768a1433e","tarball":"https://registry.npmjs.org/@arcmantle/vite-lib-config/-/vite-lib-config-1.0.2.tgz","fileCount":8,"integrity":"sha512-ZsFNkC+YM06H3fLbxw6kMYxtrscbdzs53OItqkZicNxlwutbiukiXm45mpA7thL+UQmXzYD98x7wOSiv4wjh6A==","signatures":[{"sig":"MEUCIQD7PSUPNxJdjv8GqvQeHtMvYTL8NN747LuK4AGw07056QIgM3N7TNM858fy6DV3jwE7x++amEcxQYt4zimxDUYmLzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18453},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-lib-config-1.0.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/index.js"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/27befedfda1f626f75b0bb80f3868e24/arcmantle-vite-lib-config-1.0.2.tgz","_integrity":"sha512-ZsFNkC+YM06H3fLbxw6kMYxtrscbdzs53OItqkZicNxlwutbiukiXm45mpA7thL+UQmXzYD98x7wOSiv4wjh6A==","repository":{"url":"git+https://github.com/arcmantle/vite-lib-config.git","type":"git"},"_npmVersion":"11.4.2","description":"Library configuration for vite","directories":{},"_nodeVersion":"24.4.1","dependencies":{"deepmerge-ts":"^7.1.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.14","@arcmantle/tsconfig":"^1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/vite-lib-config_1.0.2_1752781597485_0.5679140644056511","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@arcmantle/vite-lib-config","version":"1.0.3","description":"Library configuration for vite","repository":{"type":"git","url":"git+https://github.com/arcmantle/vite-lib-config.git"},"license":"Apache-2.0","author":{"name":"Kristoffer Roen-Lie"},"type":"module","exports":{".":"./dist/index.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","dependencies":{"deepmerge-ts":"^7.1.5"},"devDependencies":{"@arcmantle/tsconfig":"^1.0.9","@types/node":"^24.0.14","rimraf":"^6.0.1","typescript":"^5.8.3","vite":"^7.0.0"},"engines":{"node":">=22"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_id":"@arcmantle/vite-lib-config@1.0.3","bugs":{"url":"https://github.com/arcmantle/vite-lib-config/issues"},"homepage":"https://github.com/arcmantle/vite-lib-config#readme","_integrity":"sha512-7wgsRFlmT0UZ0zV4j+MUvHcXjpFwSeiIPGLOQLyUGBw5oRsdvhzTCNek0lKtP2u96M/bfkhsl4LkEGp75KuwVQ==","_resolved":"/tmp/2c781652802c909b6fd52fadecd5a938/arcmantle-vite-lib-config-1.0.3.tgz","_from":"file:arcmantle-vite-lib-config-1.0.3.tgz","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-7wgsRFlmT0UZ0zV4j+MUvHcXjpFwSeiIPGLOQLyUGBw5oRsdvhzTCNek0lKtP2u96M/bfkhsl4LkEGp75KuwVQ==","shasum":"b7dbebab10edc5eaede449e791a58759161ffc42","tarball":"https://registry.npmjs.org/@arcmantle/vite-lib-config/-/vite-lib-config-1.0.3.tgz","fileCount":8,"unpackedSize":18453,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCCmG7yqCv+1d6903hLCSdnbQbKe91ER/bwchyeRGByAQIgc3yY2ffAOsgtocwk1JNaHeFnxHB6/UUKANgOwrdYikA="}]},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"directories":{},"maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vite-lib-config_1.0.3_1752792919221_0.8002790918783029"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-05T22:40:44.330Z","modified":"2025-07-17T22:55:19.661Z","1.0.0":"2025-07-05T22:40:44.634Z","1.0.1":"2025-07-17T13:11:04.966Z","1.0.2":"2025-07-17T19:46:37.649Z","1.0.3":"2025-07-17T22:55:19.424Z"},"bugs":{"url":"https://github.com/arcmantle/vite-lib-config/issues"},"author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","homepage":"https://github.com/arcmantle/vite-lib-config#readme","repository":{"type":"git","url":"git+https://github.com/arcmantle/vite-lib-config.git"},"description":"Library configuration for vite","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"readme":"# @arcmantle/vite-lib-config\n\nA comprehensive Vite configuration package optimized for building TypeScript libraries and component packages. Provides sensible defaults for modern library development with automatic entry point detection, smart externalization, and TypeScript support.\n\n## Features\n\n- 🚀 **Automatic Entry Detection**: Scans and includes all TypeScript/TSX files as entry points\n- 📦 **Smart Externalization**: Automatically externalizes dependencies while allowing custom override logic\n- 🎯 **Library Optimized**: Pre-configured for library builds with ES modules output\n- 🔧 **TypeScript Ready**: Built-in support for experimental decorators and modern TypeScript features\n- 📁 **Structure Preserving**: Maintains source folder structure in output with `preserveModules`\n- ⚡ **Customizable**: Easy configuration override system with deep merging\n- 🗂️ **Monorepo Friendly**: Perfect for component libraries and package-based monorepos\n\n## Installation\n\n```bash\nnpm install @arcmantle/vite-lib-config\n# or\npnpm add @arcmantle/vite-lib-config\n# or\nyarn add @arcmantle/vite-lib-config\n```\n\n## Usage\n\n### Basic Setup\n\nCreate a `vite.config.ts` in your library project:\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig();\n```\n\nThat's it! The configuration will automatically:\n\n- Find all `.ts` and `.tsx` files in `src/` as entry points\n- Externalize all npm dependencies\n- Set up TypeScript compilation with decorators support\n- Configure source maps and ES module output\n- Preserve your source folder structure\n\n### Custom Configuration\n\nYou can override or extend the default configuration:\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig({\n  // Add custom plugins\n  plugins: [\n    // Your custom plugins\n    someVitePlugin()\n  ],\n\n  // Override build settings\n  build: {\n    outDir: 'lib', // Change output directory\n    sourcemap: false, // Disable source maps\n  },\n\n  // Add esbuild options\n  esbuild: {\n    minifyIdentifiers: false,\n  }\n});\n```\n\n### Advanced Configuration with Options\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig(\n  // Custom Vite config\n  {\n    plugins: [/* your plugins */],\n  },\n  // Configuration options\n  {\n    // Custom entry point patterns\n    entry: {\n      patterns: [\n        './src/components/**/*.ts',\n        './src/utils/**/*.ts',\n        '!./src/**/*.test.ts' // Exclude test files\n      ]\n    },\n\n    // Custom externalization logic\n    externalImport: {\n      // Custom filter function\n      filter: (source, importer, isResolved) => {\n        // Bundle specific packages instead of externalizing\n        if (source === 'some-utility-lib') return false;\n\n        // Force externalize specific packages\n        if (source.startsWith('@internal/')) return true;\n\n        // Use default logic for others\n        return undefined;\n      },\n\n      // Custom externalization regex\n      expression: /^(?!\\.{0,2}\\/|[A-Za-z]:[\\\\/]|https?:\\/\\/).*$/\n    }\n  }\n);\n```\n\n### Functional Configuration\n\nFor dynamic configurations based on build environment:\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig(\n  // Function receives ConfigEnv (command, mode, etc.)\n  (env) => ({\n    define: {\n      __DEV__: env.mode === 'development'\n    },\n    plugins: env.mode === 'development' ? [devOnlyPlugin()] : []\n  })\n);\n```\n\n### Async Configuration\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig(\n  async (env) => {\n    const config = await loadSomeAsyncConfig();\n\n    return {\n      plugins: config.plugins,\n      define: config.defines\n    };\n  }\n);\n```\n\n## Configuration Options\n\n### `ConfigOptions`\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `entry` | `object` | Entry point configuration |\n| `entry.patterns` | `string[]` | Glob patterns for entry files (default: `['./src/**/*.ts', './src/**/*.tsx']`) |\n| `externalImport` | `object` | External import configuration |\n| `externalImport.filter` | `function` | Custom externalization filter function |\n| `externalImport.expression` | `RegExp` | Regex for default externalization logic |\n\n### Entry Patterns\n\nBy default, the configuration scans for:\n\n- `./src/**/*.ts`\n- `./src/**/*.tsx`\n\nAnd excludes files matching:\n\n- `*.test.ts` / `*.test.tsx`\n- `*.demo.ts` / `*.demo.tsx`\n- `*.types.ts` / `*.types.tsx`\n\n### External Import Filter\n\nThe `filter` function receives:\n\n- `source`: The import path/module name\n- `importer`: The file doing the importing\n- `isResolved`: Whether the import has been resolved\n\nReturn values:\n\n- `true`: Force externalize this import\n- `false`: Force bundle this import\n- `undefined`: Use default externalization logic\n\n## Default Configuration\n\nThe package provides these defaults:\n\n```typescript\n{\n  publicDir: false, // No public directory for libraries\n\n  esbuild: {\n    tsconfigRaw: {\n      compilerOptions: {\n        experimentalDecorators: true\n      }\n    }\n  },\n\n  build: {\n    outDir: 'dist',\n    emptyOutDir: false, // Preserve type declarations\n    sourcemap: true,\n    lib: {\n      entry: /* auto-detected files */,\n      formats: ['es'] // ES modules only\n    },\n    rollupOptions: {\n      external: /* smart externalization */,\n      output: {\n        preserveModules: true, // Keep folder structure\n        preserveModulesRoot: 'src'\n      }\n    }\n  }\n}\n```\n\n## Examples\n\n### Component Library\n\n```typescript\n// vite.config.ts\nimport { libConfig } from '@arcmantle/vite-lib-config';\nimport { componentAutoImporter } from '@arcmantle/vite-plugin-ce-auto-import';\n\nexport default libConfig({\n  plugins: [\n    componentAutoImporter({\n      directories: [{ path: './src/components' }],\n      prefixes: [/my-/]\n    })\n  ]\n});\n```\n\n### Utility Library with Custom Entries\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig(\n  {\n    // Custom configuration\n  },\n  {\n    entry: {\n      patterns: [\n        './src/index.ts', // Main entry\n        './src/utils/*.ts', // Utility functions\n        './src/types/*.ts' // Type definitions\n      ]\n    }\n  }\n);\n```\n\n### Library with Internal Dependencies\n\n```typescript\nimport { libConfig } from '@arcmantle/vite-lib-config';\n\nexport default libConfig(\n  {},\n  {\n    externalImport: {\n      filter: (source) => {\n        // Bundle all @internal packages\n        if (source.startsWith('@internal/')) return false;\n\n        // Bundle utility libraries\n        if (['lodash-es', 'date-fns'].includes(source)) return false;\n\n        // Use default logic for others\n        return undefined;\n      }\n    }\n  }\n);\n```\n\n## TypeScript Support\n\nThe configuration is fully typed with TypeScript. It supports:\n\n- **Experimental Decorators**: Enabled by default for modern framework compatibility\n- **Preserve Modules**: Maintains your source structure for better tree-shaking\n- **Source Maps**: Generated by default for debugging\n\n## How It Works\n\n1. **Entry Detection**: Scans source files using glob patterns\n2. **Externalization**: Applies smart defaults with custom override support\n3. **Configuration Merging**: Deep merges custom config with defaults using `deepmerge-ts`\n4. **Build Optimization**: Configures Rollup for optimal library output\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build the package\npnpm build\n\n# Run in a test project\npnpm link\ncd ../your-library\npnpm link @arcmantle/vite-lib-config\n```\n\n## Requirements\n\n- Node.js >= 22\n- Vite >= 7.0.0\n\n## Dependencies\n\n- **deepmerge-ts**: Type-safe deep merging for configuration objects\n\n## License\n\nApache-2.0\n\n## Contributing\n\nThis package is part of the Arcmantle Weave monorepo. Contributions are welcome!\n","readmeFilename":"README.md"}