{"_id":"@api-buddy/plugin","_rev":"8-a6c739a280188b807527e8363fcff74c","name":"@api-buddy/plugin","dist-tags":{"latest":"3.0.0"},"versions":{"0.4.106":{"name":"@api-buddy/plugin","version":"0.4.106","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@0.4.106","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"b1ebc4c564711a6bbcc709fdf7160113dd364886","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-0.4.106.tgz","fileCount":4,"integrity":"sha512-8hnylKxyjgrI3xZEloVO9t5WIAJrZp6s+xkcXHBWOFstUG5O3epPTo2q1VDVF3vHLsTikyemBT2uqccdyzmhOQ==","signatures":[{"sig":"MEUCIQCFCaCrazV+FfrA1X9UGYWGsN5fh2cv1x2aqlbotpAyzwIgVeIIsqk6JcNygCpG785TTfUyAyPQU29jQV5mFbd/vQg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8837},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ce0089122abaa9fcfc04053fc31cd6afd64b01f7","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"^0.4.106","@api-buddy/plugin-core":"^0.4.106"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_0.4.106_1749658648767_0.6660706390720295","host":"s3://npm-registry-packages-npm-production"}},"0.4.107":{"name":"@api-buddy/plugin","version":"0.4.107","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@0.4.107","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"590e3bcdac35e1c2eed8e49bf395e88eaaa2c463","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-0.4.107.tgz","fileCount":4,"integrity":"sha512-Ik2vnmYLc+Qs40pCUBcbaIfnWl8JimAXQ/nboyjhNfhcsJMVLvbEfyZPfYn1ustsPfFnKNiznZrm4j9Tt2W3Gg==","signatures":[{"sig":"MEUCIE0mQTpP/35Yr8iO1xylnu504iIic9mX4imVs/PSHWH9AiEAheW42IBlwYvyBBOd7HutMHBF78f1XNcZL3dkb+7sB/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8837},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ce0089122abaa9fcfc04053fc31cd6afd64b01f7","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"^0.4.107","@api-buddy/plugin-core":"^0.4.107"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_0.4.107_1749658908472_0.0654222854783526","host":"s3://npm-registry-packages-npm-production"}},"0.4.108":{"name":"@api-buddy/plugin","version":"0.4.108","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@0.4.108","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"34de373a45fbf37a08d5ec38fa6b257efca4164c","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-0.4.108.tgz","fileCount":4,"integrity":"sha512-GmhrmvHncMDPrz2St2O0hvfs0llqFZ4614FoMbwENdrMPgvxLDjKdNlR0Q5E718+sQXTzKj0aEUOZFeq4KS/Lg==","signatures":[{"sig":"MEYCIQCXqrdE7SUDLIFJtBrO9FJUYeZipssUcfCXQO2QPi2GUQIhAMtlmiWdrcnLxCpVr11MTxAxMTJON+tsrU0uSzn7bjvB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8837},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ce0089122abaa9fcfc04053fc31cd6afd64b01f7","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"^0.4.108","@api-buddy/plugin-core":"^0.4.108"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_0.4.108_1749659681128_0.9891410328927008","host":"s3://npm-registry-packages-npm-production"}},"0.4.109":{"name":"@api-buddy/plugin","version":"0.4.109","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@0.4.109","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"16865280b5301b13e15467d3e62b59de2e137241","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-0.4.109.tgz","fileCount":4,"integrity":"sha512-W0h5qEXWciG+zSkvI8xhdRLQvHHjeGjltBN2xM+C1kp5MoNmF5/UIbbm8pqVoZNa5TWXBH50TtRWcJSmqUB6Ng==","signatures":[{"sig":"MEYCIQDs/7OJVwNVbXum7HXFNO3V6B1ERH+n1usdZFFWS+X35wIhANUo2QfUOR0uqf5ox63gxLwZUdRJ09NMK2dc6JK7YJpv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8837},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c882bf125a0b841951225fd4b589892f477fb904","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"^0.4.109","@api-buddy/plugin-core":"^0.4.109"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_0.4.109_1749661368026_0.4144107429612931","host":"s3://npm-registry-packages-npm-production"}},"0.4.111":{"name":"@api-buddy/plugin","version":"0.4.111","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@0.4.111","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"d4410702865d1b7e3306f887a86bd3de5350ac6b","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-0.4.111.tgz","fileCount":4,"integrity":"sha512-FlTH53Rwg/viYFDNpNrwfqHY7JlW3ofV0gsJuErulnJTMn9qwwlcX9iwN1c2WwiQ79TTEpX8eaWRq3clxK/f+A==","signatures":[{"sig":"MEUCID7CTwqlaZTR7ztbeDDo1x+f6PGa0JHfYV4afKPj6soUAiEAtEVHaYLAzDmTcc1o+BJoZYC94TdQK18PgWtvJTf6Lrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8837},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f022852071df846c09ae31848e2ae05e771c453","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"^0.4.111","@api-buddy/plugin-core":"^0.4.111"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_0.4.111_1749668637280_0.9631170953304908","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@api-buddy/plugin","version":"1.0.0","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@1.0.0","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"628d1e32dc8211ce9b45e308a10f3520905001e3","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-1.0.0.tgz","fileCount":8,"integrity":"sha512-F1tWvxGlDBqf4H7GqQTrTuD1ChtkHnHgJFr3jw2Qt/90l47g7zBys7nw4nKN99wcNIFVHvdF7QumPrJU4gOL8A==","signatures":[{"sig":"MEYCIQCVrk9MkXTlD7rLT8CXCfQySqshgI93guRdFprYigD0hgIhALRJvC+sLh3xmKxO9+bobKOfxdJ7aIYvhcRsGSjTKZJG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24808},"main":"dist/index.js","_from":"file:api-buddy-plugin-1.0.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"pnpm clean && tsup","clean":"rimraf dist","format":"prettier --write \"src/**/*.{ts,tsx}\"","prebuild":"node -e \"const { execSync } = require('child_process'); const path = require('path'); const fs = require('fs'); let root = process.cwd(); while (root !== '/' && !fs.existsSync(path.join(root, 'pnpm-workspace.yaml'))) { root = path.dirname(root); } if (root === '/') { console.error('❌ Could not find project root directory'); process.exit(1); } require(path.join(root, 'scripts/ensure-tsup-config.js'));\"","type-check":"tsc --noEmit"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_resolved":"/private/var/folders/w3/00m0j5k95zjfx4vwz3csj_vc0000gn/T/c98478cb2371b1d2f2d53935f578a73e/api-buddy-plugin-1.0.0.tgz","_integrity":"sha512-F1tWvxGlDBqf4H7GqQTrTuD1ChtkHnHgJFr3jw2Qt/90l47g7zBys7nw4nKN99wcNIFVHvdF7QumPrJU4gOL8A==","_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"1.0.0","@api-buddy/plugin-core":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0","@api-buddy/tsup-config":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_1.0.0_1750087954167_0.14999148671175688","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@api-buddy/plugin","version":"2.0.0","keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","_id":"@api-buddy/plugin@2.0.0","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"dist":{"shasum":"5f5b5e23467e4c666da96e3e719fb41de1f38054","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-2.0.0.tgz","fileCount":8,"integrity":"sha512-UjL5UEhB4ILY5Sa6p5If5pRFJ9dSLQ9VVwyj8+nCBWR776gplmm600wYMIJ0n/OdDGSF4TnyECw9Tg/ts6VuJg==","signatures":[{"sig":"MEQCIQDkszTXqcxlsnO7LgRxJ6VDNRQKvVWKF9VeFrBsj1N02AIfJHBKQp6GWfOoCJWJE2iwg1MEkD8rKAg3vJdHiOm8dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24808},"main":"dist/index.js","_from":"file:api-buddy-plugin-2.0.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"pnpm clean && tsup","clean":"rimraf dist","format":"prettier --write \"src/**/*.{ts,tsx}\"","prebuild":"node -e \"const { execSync } = require('child_process'); const path = require('path'); const fs = require('fs'); let root = process.cwd(); while (root !== '/' && !fs.existsSync(path.join(root, 'pnpm-workspace.yaml'))) { root = path.dirname(root); } if (root === '/') { console.error('❌ Could not find project root directory'); process.exit(1); } require(path.join(root, 'scripts/ensure-tsup-config.js'));\"","type-check":"tsc --noEmit"},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com"},"_resolved":"/private/var/folders/w3/00m0j5k95zjfx4vwz3csj_vc0000gn/T/3461e6b2b29df339a30a6db6e61b4f09/api-buddy-plugin-2.0.0.tgz","_integrity":"sha512-UjL5UEhB4ILY5Sa6p5If5pRFJ9dSLQ9VVwyj8+nCBWR776gplmm600wYMIJ0n/OdDGSF4TnyECw9Tg/ts6VuJg==","_npmVersion":"9.8.1","description":"Core plugin system for API Buddy","directories":{},"_nodeVersion":"18.18.0","dependencies":{"@api-buddy/types":"2.0.0","@api-buddy/plugin-core":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","tsup":"^8.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0","@api-buddy/tsup-config":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin_2.0.0_1750103105258_0.6302715099915523","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@api-buddy/plugin","version":"3.0.0","description":"Core plugin system for API Buddy","main":"dist/index.js","types":"dist/index.d.ts","dependencies":{"@api-buddy/plugin-core":"3.0.0","@api-buddy/types":"4.0.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^18.0.0","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","tsup":"^8.5.0","@api-buddy/tsup-config":"3.0.0"},"keywords":["api-buddy","plugin","extensibility"],"author":{"name":"API Buddy Team"},"license":"MIT","scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","test":"jest","dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","type-check":"tsc --noEmit","format":"prettier --write \"src/**/*.{ts,tsx}\"","prebuild":"node -e \"const { execSync } = require('child_process'); const path = require('path'); const fs = require('fs'); let root = process.cwd(); while (root !== '/' && !fs.existsSync(path.join(root, 'pnpm-workspace.yaml'))) { root = path.dirname(root); } if (root === '/') { console.error('❌ Could not find project root directory'); process.exit(1); } require(path.join(root, 'scripts/ensure-tsup-config.js'));\""},"_id":"@api-buddy/plugin@3.0.0","_integrity":"sha512-p+hNQWY21Eq4uNg3GAGQLzBpVjsT3O+zz2QJMwaRWs1djwOLskOnJ57Ul1WZ2vKX/Fm/MHCTAq64pKU2l+ugHw==","_resolved":"/private/var/folders/w3/00m0j5k95zjfx4vwz3csj_vc0000gn/T/c9915e575ced92b2fb4c906e0c4744d4/api-buddy-plugin-3.0.0.tgz","_from":"file:api-buddy-plugin-3.0.0.tgz","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-p+hNQWY21Eq4uNg3GAGQLzBpVjsT3O+zz2QJMwaRWs1djwOLskOnJ57Ul1WZ2vKX/Fm/MHCTAq64pKU2l+ugHw==","shasum":"8761037fd946b1812446c6f5a8e826309a65ddcb","tarball":"https://registry.npmjs.org/@api-buddy/plugin/-/plugin-3.0.0.tgz","fileCount":8,"unpackedSize":24966,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAXLUEExHLP+M+MpAHBZvAqcn6urVUqglCINyZRh+fPMAiEAvNC3WEqMMCZnNZfxPCXa63ZPOyiQKc2oLl8E6RdX1jU="}]},"_npmUser":{"name":"iamtomhanks","email":"brechanson@gmail.com","actor":{"name":"iamtomhanks","email":"brechanson@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin_3.0.0_1751386831782_0.26157199570221823"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-11T16:17:28.663Z","modified":"2025-07-01T16:20:32.255Z","0.4.106":"2025-06-11T16:17:28.967Z","0.4.107":"2025-06-11T16:21:48.675Z","0.4.108":"2025-06-11T16:34:41.327Z","0.4.109":"2025-06-11T17:02:48.203Z","0.4.111":"2025-06-11T19:03:57.467Z","1.0.0":"2025-06-16T15:32:34.344Z","2.0.0":"2025-06-16T19:45:05.434Z","3.0.0":"2025-07-01T16:20:31.962Z"},"author":{"name":"API Buddy Team"},"license":"MIT","keywords":["api-buddy","plugin","extensibility"],"description":"Core plugin system for API Buddy","maintainers":[{"name":"iamtomhanks","email":"brechanson@gmail.com"}],"readme":"# @api-buddy/plugin\n\nCore plugin system for API Buddy, providing a flexible and extensible way to add functionality to the API Buddy ecosystem.\n\n## Features\n\n- **Plugin Management**: Load, initialize, and manage plugins\n- **Lifecycle Hooks**: Built-in hooks for different stages of the application lifecycle\n- **Type Safety**: Fully typed plugin interfaces and extensions\n- **Multiple Plugin Types**: Support for schema, type generation, and database plugins\n- **Singleton Pattern**: Global plugin manager instance for easy access\n\n## Installation\n\n```bash\nnpm install @api-buddy/plugin\n# or\nyarn add @api-buddy/plugin\n```\n\n## Usage\n\n### Basic Plugin Creation\n\n```typescript\nimport { createPlugin, pluginManager } from '@api-buddy/plugin';\n\n// Create a simple plugin\nconst myPlugin = createPlugin({\n  name: 'my-plugin',\n  version: '1.0.0',\n  description: 'My custom plugin',\n  hooks: {\n    beforeSchemaLoad: async (context) => {\n      console.log('Before schema load hook called');\n    },\n  },\n});\n\n// Load the plugin\nawait pluginManager.loadPlugin(myPlugin);\n```\n\n### Schema Plugin Example\n\n```typescript\nimport { createSchemaPlugin, pluginManager } from '@api-buddy/plugin';\n\nconst schemaPlugin = createSchemaPlugin('my-schema-plugin', {\n  name: 'my-schema-plugin',\n  version: '1.0.0',\n  extendSchema: async (schema) => {\n    // Add custom fields or types to the schema\n    return {\n      ...schema,\n      // Add your schema extensions here\n    };\n  },\n  validateSchema: async (schema) => {\n    const errors: string[] = [];\n    // Add validation logic here\n    return errors;\n  },\n});\n\nawait pluginManager.loadPlugin(schemaPlugin);\n```\n\n### Type Generation Plugin Example\n\n```typescript\nimport { createTypegenPlugin, pluginManager } from '@api-buddy/plugin';\n\nconst typegenPlugin = createTypegenPlugin('my-typegen-plugin', {\n  name: 'my-typegen-plugin',\n  version: '1.0.0',\n  getTypeMappings: () => ({\n    // Map custom scalar types to TypeScript types\n    'CustomScalar': 'string',\n  }),\n  generateTypes: async (schema) => {\n    // Generate custom type definitions\n    return '// Custom types';\n  },\n  generateImports: async () => [\n    \"import { CustomType } from './custom-types';\",\n  ],\n});\n\nawait pluginManager.loadPlugin(typegenPlugin);\n```\n\n## Plugin Lifecycle\n\n1. **Loading**: Plugins are loaded from specified directories or directly\n2. **Initialization**: Each plugin's `initialize` method is called (if defined)\n3. **Hooks**: Plugins can register hooks for various lifecycle events\n4. **Execution**: Hooks are called at the appropriate times during execution\n5. **Cleanup**: When the application shuts down, each plugin's `destroy` method is called (if defined)\n\n## Available Hooks\n\n- `beforeSchemaLoad`: Called before the schema is loaded\n- `afterSchemaLoad`: Called after the schema is loaded\n- `beforeCodegen`: Called before code generation starts\n- `afterCodegen`: Called after code generation completes\n- `beforeTypegen`: Called before type generation starts\n- `afterTypegen`: Called after type generation completes\n- `beforeMigrate`: Called before database migration starts\n- `afterMigrate`: Called after database migration completes\n\n## Plugin Types\n\n### Schema Plugins\nExtend or validate the schema definition.\n\n### Type Generation Plugins\nCustomize TypeScript type generation.\n\n### Database Plugins\nHandle database schema generation and migrations.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}