{"_id":"@catfyrr/vite-plugin-ssi","_rev":"5-1787f81578172b506b9a635fc43db53a","name":"@catfyrr/vite-plugin-ssi","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@catfyrr/vite-plugin-ssi","version":"0.0.1","keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","_id":"@catfyrr/vite-plugin-ssi@0.0.1","maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"dist":{"shasum":"3027ba67ca9dc835f576374fd20301e500d089a7","tarball":"https://registry.npmjs.org/@catfyrr/vite-plugin-ssi/-/vite-plugin-ssi-0.0.1.tgz","fileCount":3,"integrity":"sha512-thk89G4ZD2vSI/DU5BBIWLDS18kMegCiSSOhQEqyADXOdtxtVfHLkjqKCFxHHFLOt/igWsjmbIRDiVgXuyIDVA==","signatures":[{"sig":"MEUCIQCWYfWuz5n9FCSy2hkCavmS0FZ7TuKlcMObl6UPUdzoVQIgEaqUq8IPXDZCegO+8mSvJB2XPZwGRb2AEPfew7W12yU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4085},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"gitHead":"ad0aac62272bb737964babc88279cfebe54393cd","scripts":{"lint":"eslint src tests","test":"bun test","build":"bun run build:esm && bun run build:cjs","prepare":"husky install","lint:fix":"eslint src tests --fix","build:cjs":"bun build ./src/index.ts --outdir dist --target bun --format cjs","build:esm":"bun build ./src/index.ts --outdir dist --target bun --format esm","test:watch":"bun test --watch","prepublishOnly":"bun run build"},"_npmUser":{"name":"catfyrr","email":"ibrahim3@tutamail.com"},"repository":{"url":"git+https://github.com/catFurr/vite-plugin-ssi.git","type":"git"},"_npmVersion":"10.8.2","description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","directories":{},"_nodeVersion":"20.19.5","dependencies":{"vite":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","eslint":"^8.54.0","prettier":"^3.1.0","bun-types":"latest","typescript":"^5.3.2","@types/node":"^20.10.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","@typescript-eslint/parser":"^6.13.1","@typescript-eslint/eslint-plugin":"^6.13.1"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-ssi_0.0.1_1761593990369_0.2471159496143691","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@catfyrr/vite-plugin-ssi","version":"0.0.2","keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","_id":"@catfyrr/vite-plugin-ssi@0.0.2","maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"dist":{"shasum":"0c5e5e940a0d1803187240da34d26ada19796751","tarball":"https://registry.npmjs.org/@catfyrr/vite-plugin-ssi/-/vite-plugin-ssi-0.0.2.tgz","fileCount":3,"integrity":"sha512-YSwQ0zwbeJlfjjGSr3U0YrsC93hX110YRzkzVvqyxt3oHt7ThmRDVjfkkbA+nrAxIFFyYLj5KE1YWYs2xWVZQA==","signatures":[{"sig":"MEUCIEw3yMut/4hedErITOEEe3C+y7zuvrOMsaqeAOvT6kSdAiEA2Z0tLtEyvJ6kC55OGJRNsfC28JlKaXBx+ZoJghjAYhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22412},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"gitHead":"bd7c55a1c311b2d29b94f7115cba85e7587d830d","scripts":{"lint":"eslint src tests","test":"bun test","build":"bun run build:esm && bun run build:cjs","lint:fix":"eslint src tests --fix","build:cjs":"bun build ./src/index.ts --outdir dist --target bun --format cjs","build:esm":"bun build ./src/index.ts --outdir dist --target bun --format esm","test:watch":"bun test --watch","prepublishOnly":"bun run build"},"_npmUser":{"name":"catfyrr","email":"ibrahim3@tutamail.com"},"repository":{"url":"git+https://github.com/catFurr/vite-plugin-ssi.git","type":"git"},"_npmVersion":"10.8.2","description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","directories":{},"_nodeVersion":"20.19.5","dependencies":{"vite":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","eslint":"^8.54.0","prettier":"^3.1.0","bun-types":"latest","typescript":"^5.3.2","@types/node":"^20.10.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","@typescript-eslint/parser":"^6.13.1","@typescript-eslint/eslint-plugin":"^6.13.1"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-ssi_0.0.2_1762008986308_0.8277205486266457","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@catfyrr/vite-plugin-ssi","version":"0.0.3","keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","_id":"@catfyrr/vite-plugin-ssi@0.0.3","maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"dist":{"shasum":"0d33ca49ed9cd9bacb217132cdbbea1976484247","tarball":"https://registry.npmjs.org/@catfyrr/vite-plugin-ssi/-/vite-plugin-ssi-0.0.3.tgz","fileCount":3,"integrity":"sha512-v5sN8ezXFBMwXpLNMTE2o+BCmYQnYhzJA8vMvP2ccamOgb+e9/QsWa2wR5V8F5KgwU7cTGQrMvhEOUfGQiSb8A==","signatures":[{"sig":"MEQCIGxTjcigkCIk4slbGCTv9L2tUVU8jPGtTaFT+Nb1/hLeAiBpmelSXzFB8dy6Kg9a2bSqfQYibMGQmCboN3ESs9ropQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22438},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"gitHead":"2c51bda4fb810e07edc78026ba66a5905534d554","scripts":{"lint":"eslint src tests","test":"bun test","build":"bun run build:esm && bun run build:cjs","lint:fix":"eslint src tests --fix","build:cjs":"bun build ./src/index.ts --outdir dist --target bun --format cjs","build:esm":"bun build ./src/index.ts --outdir dist --target bun --format esm","test:watch":"bun test --watch","prepublishOnly":"bun run build"},"_npmUser":{"name":"catfyrr","email":"ibrahim3@tutamail.com"},"repository":{"url":"git+https://github.com/catFurr/vite-plugin-ssi.git","type":"git"},"_npmVersion":"10.8.2","description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"vite":"^5.0.0","husky":"^8.0.3","eslint":"^8.54.0","prettier":"^3.1.0","bun-types":"latest","typescript":"^5.3.2","@types/node":"^20.10.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","@typescript-eslint/parser":"^6.13.1","@typescript-eslint/eslint-plugin":"^6.13.1"},"peerDependencies":{"vite":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-ssi_0.0.3_1762259602086_0.667135862319548","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@catfyrr/vite-plugin-ssi","version":"0.0.4","keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","_id":"@catfyrr/vite-plugin-ssi@0.0.4","maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"dist":{"shasum":"48e77f5c45e6c4cac3124a7b5c3fb3167c383268","tarball":"https://registry.npmjs.org/@catfyrr/vite-plugin-ssi/-/vite-plugin-ssi-0.0.4.tgz","fileCount":8,"integrity":"sha512-3XXBM+hegPWejrNdHHhGYyq9z4OAylOovP3bv9KP1EPlO7bpp2AdcvU5041P7bUJZFU1PxuaSmuvmD2YsaqBgg==","signatures":[{"sig":"MEQCICHfgjFjLNXCmw0Kzr78+/IXKLQJ7r7dHfCZpKx4ABKLAiAmKGhogiOyxu4sIcdM2OFAhc4HEUbUIypo82nvlQ/DMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36556},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"gitHead":"0fb0af6c3b59450a095d0de15e08164be1fb40a2","scripts":{"lint":"eslint src tests","test":"bun test","build":"bun run build:esm && bun run build:cjs && bun run build:types","lint:fix":"eslint src tests --fix","build:cjs":"bun build ./src/index.ts --outfile dist/index.cjs --target node --format cjs","build:esm":"bun build ./src/index.ts --outfile dist/index.mjs --target node --format esm","test:watch":"bun test --watch","build:types":"tsc --emitDeclarationOnly --declaration --outDir dist","prepublishOnly":"bun run build"},"_npmUser":{"name":"catfyrr","email":"ibrahim3@tutamail.com"},"repository":{"url":"git+https://github.com/catFurr/vite-plugin-ssi.git","type":"git"},"_npmVersion":"10.8.2","description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"vite":"^5.0.0","husky":"^8.0.3","eslint":"^8.54.0","prettier":"^3.1.0","bun-types":"latest","typescript":"^5.3.2","@types/node":"^20.10.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","@typescript-eslint/parser":"^6.13.1","@typescript-eslint/eslint-plugin":"^6.13.1"},"peerDependencies":{"vite":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-ssi_0.0.4_1762266164939_0.7447709256513186","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@catfyrr/vite-plugin-ssi","version":"0.1.0","description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","type":"module","exports":{"import":"./dist/index.mjs","require":"./dist/index.cjs","types":"./dist/index.d.ts"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"build":"bun run build:esm && bun run build:cjs && bun run build:types","build:esm":"bun build ./src/index.ts --outfile dist/index.mjs --target node --format esm","build:cjs":"bun build ./src/index.ts --outfile dist/index.cjs --target node --format cjs","build:types":"tsc --emitDeclarationOnly --declaration --outDir dist","test":"bun test","test:watch":"bun test --watch","lint":"eslint src tests","lint:fix":"eslint src tests --fix","prepublishOnly":"bun run build"},"keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/catFurr/vite-plugin-ssi.git"},"bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"@types/node":"^20.10.0","@typescript-eslint/eslint-plugin":"^6.13.1","@typescript-eslint/parser":"^6.13.1","bun-types":"latest","eslint":"^8.54.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","husky":"^8.0.3","prettier":"^3.1.0","typescript":"^5.3.2","vite":"^6.0.0"},"_id":"@catfyrr/vite-plugin-ssi@0.1.0","gitHead":"30984d8325d1cdb08109975aa3ed6d3a61386a9c","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-MJ0/ZZAnb3D2s+0tRBBF1rtCwtvMI/jvMGeRYBv+H7KLtEDeK+5EiejmyZevCOgIQ6P+nSCx/IFex9GjX7PDPA==","shasum":"0f594df726b4330ba9e4e8d329b7a72209b67d11","tarball":"https://registry.npmjs.org/@catfyrr/vite-plugin-ssi/-/vite-plugin-ssi-0.1.0.tgz","fileCount":8,"unpackedSize":38473,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFHPbZIU3qsdDa612jKy8nawiucGCIAZ1X1KbctXL2nzAiAtVuwwyUEnKZkl+fJeK2C2dCzZtyL4V3e11pw4BG6cWg=="}]},"_npmUser":{"name":"catfyrr","email":"ibrahim3@tutamail.com"},"directories":{},"maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vite-plugin-ssi_0.1.0_1780651279834_0.13677617473152548"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-27T19:39:50.298Z","modified":"2026-06-05T09:21:20.132Z","0.0.1":"2025-10-27T19:39:50.553Z","0.0.2":"2025-11-01T14:56:26.510Z","0.0.3":"2025-11-04T12:33:22.262Z","0.0.4":"2025-11-04T14:22:45.152Z","0.1.0":"2026-06-05T09:21:20.014Z"},"bugs":{"url":"https://github.com/catFurr/vite-plugin-ssi/issues"},"author":{"name":"catFurr","email":"ibrahim3@tutamail.com"},"license":"MIT","homepage":"https://github.com/catFurr/vite-plugin-ssi#readme","keywords":["vite","plugin","ssi","server-side-includes","build-tool"],"repository":{"type":"git","url":"git+https://github.com/catFurr/vite-plugin-ssi.git"},"description":"Fully Apache/Nginx compatible Server-Side Includes (SSI) Vite plugin","maintainers":[{"name":"catfyrr","email":"ibrahim3@tutamail.com"}],"readme":"# Vite SSI Plugin\n\nA fully Apache/Nginx compatible Server-Side Includes (SSI) plugin for Vite. This plugin processes SSI directives in your HTML files during development, build, and preview modes, enabling server-side includes without needing a traditional web server.\n\n## Features\n\n- 🌐 **SSI Directive Support** - Process Server-Side Includes in your Vite projects\n- 🚀 **Full Vite Integration** - Works seamlessly in dev, build, and preview modes\n- 🔧 **Configurable File Types** - Intelligently process different file types with SSI\n- 🔄 **Hot Module Replacement (HMR)** - Automatic reloading when SSI dependencies change\n- 📦 **Zero Configuration** - Works out of the box with sensible defaults\n- 🛡️ **Safe by Default** - Circular dependency detection and depth limiting\n\n## Installation\n\n```bash\nbun add @catfyrr/vite-plugin-ssi\n# or\nnpm install @catfyrr/vite-plugin-ssi\n# or\nnpx jsr install @catfyrr/vite-plugin-ssi\n```\n\n## Quick Start\n\nAdd the plugin to your `vite.config.ts`:\n\n```typescript\nimport { defineConfig } from 'vite';\nimport vitePluginSsi from '@catfyrr/vite-plugin-ssi';\n\nexport default defineConfig({\n  plugins: [\n    vitePluginSsi(),\n  ],\n});\n```\n\nNow you can use SSI directives in your HTML files:\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n  <!--#include virtual=\"/common/head.html\" -->\n</head>\n<body>\n  <!--#include virtual=\"/components/header.html\" -->\n  <main>\n    <h1>Welcome</h1>\n  </main>\n  <!--#include virtual=\"/components/footer.html\" -->\n</body>\n</html>\n```\n\n## Configuration Options\n\n### `maxDepth`\n\nMaximum depth for recursive includes.\n\n- **Type:** `number`\n- **Default:** `10`\n- **Description:** Prevents infinite recursion and circular dependencies\n\n```typescript\nvitePluginSsi({\n  maxDepth: 15, // Allow deeper nesting\n})\n```\n\n### `enforce`\n\nWhen to run this plugin in the Vite pipeline.\n\n- **Type:** `'pre' | 'post'`\n- **Default:** `'pre'`\n- **Description:** Controls the execution order relative to other plugins\n\n```typescript\nvitePluginSsi({\n  enforce: 'pre', // Run before other plugins\n})\n```\n\n### `apply`\n\nApply plugin only in specific environments.\n\n- **Type:** `'serve' | 'build' | 'preview' | { serve?: boolean; build?: boolean; preview?: boolean }`\n- **Default:** `undefined` (applies to all environments)\n- **Description:** Control which Vite commands should process SSI\n\n```typescript\n// Apply only in dev server\nvitePluginSsi({\n  apply: 'serve',\n})\n\n// Apply only in build\nvitePluginSsi({\n  apply: 'build',\n})\n\n// Apply to specific environments using object form\nvitePluginSsi({\n  apply: {\n    serve: true,\n    build: true,\n    preview: false,\n  },\n})\n```\n\n### `includeFileTypes`\n\nFile types to apply SSI processing to for included files (at any depth).\n\n- **Type:** `string[]`\n- **Default:** `[]` (only process top-level HTML files)\n- **Description:** When files are included via SSI, they will also be processed if they match these types. SSI always applies to top-level HTML files regardless of this setting.\n\n```typescript\n// Process JS/TS files when included\nvitePluginSsi({\n  includeFileTypes: ['js', 'html'], // Processes .js, .mjs, .ts, .tsx, .jsx, etc.\n})\n```\n\nThe plugin intelligently maps file types to extensions:\n- `'js'` → `.js`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.jsx`, `.mts`, `.cts`\n- `'html'` → `.html`, `.htm`, `.shtml`\n- `'css'` → `.css`, `.scss`, `.sass`, `.less`, `.styl`\n- `'json'` → `.json`, `.jsonc`\n- `'xml'` → `.xml`, `.xhtml`\n- `'text'` → `.txt`, `.md`, `.markdown`\n\n### `fileTypeMap`\n\nCustom file type to extension mappings.\n\n- **Type:** `FileTypeMap`\n- **Default:** See [file-types.ts](./src/file-types.ts) for defaults\n- **Description:** Override or extend the default file type mappings\n\n```typescript\nimport type { FileTypeMap } from '@catfyrr/vite-plugin-ssi';\n\nconst customFileTypes: FileTypeMap = {\n  html: ['.html', '.htm', '.shtml'],\n  js: ['.js', '.mjs', '.ts', '.jsx', '.tsx'],\n  // Add custom types\n  vue: ['.vue'],\n  svelte: ['.svelte'],\n};\n\nvitePluginSsi({\n  includeFileTypes: ['js', 'vue'],\n  fileTypeMap: customFileTypes,\n})\n```\n\n## Usage Examples\n\n### Basic Include\n\n```html\n<!-- index.html -->\n<!DOCTYPE html>\n<html>\n<head>\n  <title>My Site</title>\n</head>\n<body>\n  <!--#include virtual=\"/header.html\" -->\n  <main>Content</main>\n  <!--#include virtual=\"/footer.html\" -->\n</body>\n</html>\n```\n\n### Absolute and Relative Paths\n\n```html\n<!-- Absolute paths from project root -->\n<!--#include virtual=\"/components/nav.html\" -->\n\n<!-- Relative paths from current file -->\n<!--#include virtual=\"../common/sidebar.html\" -->\n```\n\n### Processing Non-HTML Files\n\nWhen you want SSI to process included JavaScript/TypeScript files:\n\n```typescript\nvitePluginSsi({\n  includeFileTypes: ['js', 'html'],\n})\n```\n\n```html\n<!-- index.html -->\n<!--#include virtual=\"/scripts/utils.ts\" -->\n```\n\nThe included `.ts` file will also be processed for SSI directives if it contains them.\n\n### Environment-Specific Configuration\n\n```typescript\nimport { defineConfig } from 'vite';\nimport vitePluginSsi from '@catfyrr/vite-plugin-ssi';\n\nexport default defineConfig({\n  plugins: [\n    vitePluginSsi({\n      // Only process SSI during build (for static site generation)\n      apply: 'build',\n      includeFileTypes: ['html'],\n      maxDepth: 5,\n    }),\n  ],\n})\n```\n\n## How It Works\n\n1. **Development Mode (`vite dev`)**: SSI directives are processed on-the-fly when HTML files are served. Changes to included files trigger HMR automatically.\n\n2. **Build Mode (`vite build`)**: SSI directives are processed during the build phase, and the final HTML output contains the resolved includes.\n\n3. **Preview Mode (`vite preview`)**: SSI directives are processed when serving the built files, allowing you to test the built output with SSI processing.\n\n## Error Handling\n\nThe plugin provides clear error messages for common issues:\n\n- **Circular Dependencies**: Detected and reported with the dependency chain\n- **Missing Files**: Included files that don't exist show an error comment\n- **Max Depth Exceeded**: Recursion limits are enforced and reported\n\n```html\n<!-- If header.html doesn't exist -->\n<!-- SSI Error: File not found: /path/to/header.html -->\n\n<!-- If circular dependency detected -->\n<!-- SSI Error: Circular include detected: file-a.html -> file-b.html -> file-a.html -->\n```\n\n## Compatibility\n\nThis plugin currently supports:\n\n✅ **Implemented:**\n- `<!--#include virtual=\"...\" -->` - File inclusion with absolute and relative paths\n- Recursive includes with depth limiting\n- Circular dependency detection\n- HMR for included file changes\n- Configurable file type processing\n\n📋 **Roadmap:** See [COMPATIBILITY.md](./COMPATIBILITY.md) for full compatibility tracking with Apache and Nginx SSI modules.\n\n## TypeScript Support\n\nThe plugin includes full TypeScript definitions:\n\n```typescript\nimport vitePluginSsi, { type VitePluginSsiOptions, type FileTypeMap } from '@catfyrr/vite-plugin-ssi';\n```\n\n## Troubleshooting\n\n### SSI directives not being processed\n\n1. Ensure your HTML file has the correct extension (`.html`, `.htm`, `.shtml`)\n2. Check that the plugin is added to your `vite.config.ts`\n3. Verify file paths are correct (use absolute paths from project root or relative paths)\n\n### HMR not working for included files\n\n- Make sure you're using the dev server (`vite dev`)\n- Check that the included file is being tracked as a dependency\n- Verify the included file path matches exactly (case-sensitive on some systems)\n\n### Circular dependency errors\n\n- Review your include structure to identify the cycle\n- Consider using a shared partial file instead of circular includes\n- Adjust `maxDepth` if needed, but beware of infinite loops\n\n## Security Considerations\n\n- The plugin only processes SSI directives, it does not execute shell commands or arbitrary code\n- File access is limited to the project directory\n- Circular dependencies are detected and prevented\n- Maximum include depth limits prevent excessive recursion\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n\n## License\n\nMIT\n\n## References\n\n- [Apache SSI Documentation](https://httpd.apache.org/docs/current/howto/ssi.html)\n- [Nginx SSI Module Documentation](https://nginx.org/en/docs/http/ngx_http_ssi_module.html)\n- [Apache mod_include Documentation](https://httpd.apache.org/docs/current/mod/mod_include.html)\n","readmeFilename":"README.md"}