{"_id":"@ujjwaljain16/migratedb","_rev":"2-d904f279b6339b1a2af1b946946c2b05","name":"@ujjwaljain16/migratedb","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@ujjwaljain16/migratedb","version":"1.0.0","keywords":["node.js","sql","database","db","migration","postgres","versioning","security"],"author":{"url":"https://github.com/ujjwaljain16","name":"Ujjwal Jain"},"license":"Apache-2.0","_id":"@ujjwaljain16/migratedb@1.0.0","maintainers":[{"name":"ujjwaljain16","email":"jainujjwal1609@gmail.com"}],"homepage":"https://github.com/ujjwaljain16/migratedb#readme","bugs":{"url":"https://github.com/ujjwaljain16/migratedb/issues"},"bin":{"migratedb":"dist/cjs/cli/CLI.js"},"dist":{"shasum":"fe2d970dded93879c6e189813081ce2d9a370c5a","tarball":"https://registry.npmjs.org/@ujjwaljain16/migratedb/-/migratedb-1.0.0.tgz","fileCount":135,"integrity":"sha512-Mm4RMAm28j4Uei5foAHwdCEubdRTht/Ta3zTqCzlvnX0PK9sGDllv6Dr5DhVuXLB5wh9egIzeJFMJILt6xhPkA==","signatures":[{"sig":"MEYCIQDJibQpZrwrTHmQBsvqh1/r/vg3rUcTc80JSlPz7+bPiAIhAL2Fhq4Y5n+u+1REPjs7odMEgL7WQB4YqDWXHK/ksvph","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337120},"main":"dist/cjs/index.js","types":"dist/cjs/index.d.ts","module":"dist/esm/index.js","exports":{".":{"types":"./dist/cjs/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"55b9778d3956404bf0251a476a0b682d7362b9d0","scripts":{"lint":"eslint . --ext .ts","test":"cross-env TS_NODE_PROJECT=test/tsconfig.json mocha --timeout 60000 -r ts-node/register ./test/**/*Test.ts","audit":"npm audit","build":"rimraf dist/ && npm run build:esm && npm run build:cjs","start":"tsc && node dist/esm/index.js","lint:fix":"eslint . --fix --ext .ts","audit:fix":"npm audit fix","build:cjs":"tsc --module CommonJS --outDir dist/cjs","build:esm":"tsc","preversion":"npm run lint && npm test","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"ujjwaljain16","email":"jainujjwal1609@gmail.com"},"repository":{"url":"git+https://github.com/ujjwaljain16/migratedb.git","type":"git"},"_npmVersion":"10.9.3","description":"Powerful and secure database migration tool with rollback, CLI, transactions, and enhanced features","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"mocha":"^10.7.3","eslint":"^8.57.1","ts-node":"^10.9.2","@types/pg":"^8.11.8","cross-env":"^10.1.0","typescript":"^5.6.3","@types/node":"^20.14.0","@types/mocha":"^10.0.7","testcontainers":"^11.0.0","eslint-plugin-n":"^16.6.2","eslint-plugin-import":"^2.31.0","@types/better-sqlite3":"^7.6.11","eslint-plugin-promise":"^6.6.0","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0","eslint-config-standard-with-typescript":"^43.0.1"},"peerDependencies":{"pg":"*","mysql2":"*","better-sqlite3":"*"},"_npmOperationalInternal":{"tmp":"tmp/migratedb_1.0.0_1763812226749_0.7896480751134154","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ujjwaljain16/migratedb","version":"1.0.1","description":"Powerful and secure database migration tool with rollback, CLI, transactions, and enhanced features","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/cjs/index.d.ts","exports":{".":{"types":"./dist/cjs/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"bin":{"migratedb":"dist/cjs/cli/CLI.js"},"scripts":{"build":"rimraf dist/ && npm run build:esm && npm run build:cjs","build:esm":"tsc","build:cjs":"tsc --module CommonJS --outDir dist/cjs","start":"tsc && node dist/esm/index.js","lint":"eslint . --ext .ts","lint:fix":"eslint . --fix --ext .ts","test":"cross-env TS_NODE_PROJECT=test/tsconfig.json mocha --timeout 60000 -r ts-node/register ./test/**/*Test.ts","audit":"npm audit","audit:fix":"npm audit fix","prepublishOnly":"npm run lint && npm test && npm run build","preversion":"npm run lint && npm test"},"repository":{"type":"git","url":"git+https://github.com/ujjwaljain16/migratedb.git"},"keywords":["node.js","sql","database","db","migration","postgres","versioning","security"],"author":{"name":"Ujjwal Jain","url":"https://github.com/ujjwaljain16"},"license":"Apache-2.0","bugs":{"url":"https://github.com/ujjwaljain16/migratedb/issues"},"homepage":"https://github.com/ujjwaljain16/migratedb#readme","devDependencies":{"@types/better-sqlite3":"^7.6.11","@types/mocha":"^10.0.7","@types/node":"^20.14.0","@types/pg":"^8.11.8","@typescript-eslint/eslint-plugin":"^6.21.0","@typescript-eslint/parser":"^6.21.0","cross-env":"^10.1.0","eslint":"^8.57.1","eslint-config-standard-with-typescript":"^43.0.1","eslint-plugin-import":"^2.31.0","eslint-plugin-n":"^16.6.2","eslint-plugin-promise":"^6.6.0","mocha":"^10.7.3","testcontainers":"^11.0.0","ts-node":"^10.9.2","typescript":"^5.6.3"},"peerDependencies":{"better-sqlite3":"*","mysql2":"*","pg":"*"},"_id":"@ujjwaljain16/migratedb@1.0.1","gitHead":"8461dea6c98007bf5a3a435e510f32226f3dfda4","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-NIPeLjlgtpDKTVhAJF0UBZBLldpaflRVD1meLooMaHwAZLlOcv396YUf7Zys9UoAKsaEbfgHIPexRq5kkQXgUg==","shasum":"cc58c2cca85b8a43301d20b94df47aa20e94c36b","tarball":"https://registry.npmjs.org/@ujjwaljain16/migratedb/-/migratedb-1.0.1.tgz","fileCount":135,"unpackedSize":335327,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBbUV4S09aSAcW8ii6EvevCB+8+zq/6fg5tMOpUk12PwAiACg3vgGrHh/kvhTD2byGHmb2P+5P6pFBhRp/7t29oRbg=="}]},"_npmUser":{"name":"ujjwaljain16","email":"jainujjwal1609@gmail.com"},"directories":{},"maintainers":[{"name":"ujjwaljain16","email":"jainujjwal1609@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/migratedb_1.0.1_1764759353523_0.1363188137608533"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-22T11:50:26.646Z","modified":"2025-12-03T10:55:53.928Z","1.0.0":"2025-11-22T11:50:26.973Z","1.0.1":"2025-12-03T10:55:53.734Z"},"bugs":{"url":"https://github.com/ujjwaljain16/migratedb/issues"},"author":{"name":"Ujjwal Jain","url":"https://github.com/ujjwaljain16"},"license":"Apache-2.0","homepage":"https://github.com/ujjwaljain16/migratedb#readme","keywords":["node.js","sql","database","db","migration","postgres","versioning","security"],"repository":{"type":"git","url":"git+https://github.com/ujjwaljain16/migratedb.git"},"description":"Powerful and secure database migration tool with rollback, CLI, transactions, and enhanced features","maintainers":[{"name":"ujjwaljain16","email":"jainujjwal1609@gmail.com"}],"readme":"# MigrateDB 🚀\n\n[![Build](https://img.shields.io/badge/build-passing-brightgreen)]()\n[![Version](https://img.shields.io/badge/version-1.0.0-blue)]()\n[![License](https://img.shields.io/badge/license-Apache--2.0-green)]()\n\n**Powerful and secure database migration tool** for Node.js with support for PostgreSQL, MySQL, MariaDB, and SQLite. MigrateDB provides a robust, feature-rich solution for managing database schema changes with rollback support, transactions, dependency management, and much more.\n\n## ✨ Features\n\n### Core Features\n- ✅ **Multi-Database Support** - PostgreSQL, MySQL/MariaDB, SQLite\n- ✅ **Rollback Support** - Safe migration rollbacks with down scripts\n- ✅ **Transaction Support** - Automatic transaction wrapping with rollback on failure\n- ✅ **Migration Locking** - Prevents concurrent migration runs\n- ✅ **Checksum Verification** - Ensures migration integrity\n- ✅ **CLI Tool** - Full-featured command-line interface\n- ✅ **Status Tracking** - View applied and pending migrations\n- ✅ **Dry-Run Mode** - Preview migrations without executing\n\n### Advanced Features\n- 🔄 **Migration Dependencies** - Declare and resolve migration dependencies\n- 🌍 **Environment-Specific Migrations** - Filter migrations by environment (dev/staging/prod)\n- 📝 **Configuration Files** - JSON/YAML configuration support\n- ✅ **Validation** - Validate migration files for common issues\n- 📊 **Audit Trail** - Track migration execution with timestamps\n- 🎯 **Type Safety** - Full TypeScript support with no `any` types\n\n## 📦 Installation\n\n```bash\nnpm install @ujjwaljain16/migratedb\n```\n\n### Peer Dependencies\n\nInstall the appropriate database driver:\n\n```bash\n# For PostgreSQL\nnpm install pg\n\n# For MySQL/MariaDB\nnpm install mysql2\n\n# For SQLite\nnpm install better-sqlite3\n```\n\n## 🚀 Quick Start\n\n### 1. Create Migration Files\n\nCreate a `migrations` directory and add your SQL files:\n\n```bash\nmkdir migrations\n```\n\n```sql\n-- migrations/001__create_users.sql\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\n-- DOWN\nDROP TABLE IF EXISTS users;\n```\n\n### 2. Run Migrations\n\n**Using CLI:**\n```bash\nmigratedb migrate --connection postgres://user:pass@localhost/dbname\n```\n\n**Using Code:**\n```typescript\nimport { migratedb } from '@ujjwaljain16/migratedb'\n\nawait migratedb.migrate('postgres://user:pass@localhost/dbname')\n```\n\n### 3. Check Status\n\n```bash\nmigratedb status --connection postgres://user:pass@localhost/dbname\n```\n\n## 🔧 Configuration\n\n### Configuration File\n\nCreate `migratedb.config.json`:\n\n```json\n{\n  \"migrationsDir\": \"./migrations\",\n  \"verifyChecksum\": true,\n  \"useTransactions\": true,\n  \"enableLocking\": true,\n  \"logLevel\": \"info\",\n  \"environments\": {\n    \"dev\": {\n      \"connectionString\": \"postgres://user:pass@localhost/dev_db\"\n    },\n    \"prod\": {\n      \"connectionString\": \"postgres://user:pass@localhost/prod_db\",\n      \"verifyChecksum\": true,\n      \"useTransactions\": true\n    }\n  }\n}\n```\n\nOr use YAML (`migratedb.config.yaml`):\n\n```yaml\nmigrationsDir: ./migrations\nverifyChecksum: true\nuseTransactions: true\nenableLocking: true\nlogLevel: info\nenvironments:\n  dev:\n    connectionString: postgres://user:pass@localhost/dev_db\n  prod:\n    connectionString: postgres://user:pass@localhost/prod_db\n    verifyChecksum: true\n```\n\n### Environment Variables\n\n```bash\nexport DATABASE_URL=\"postgres://user:pass@localhost/dbname\"\nexport MIGRATEDB_ENV=\"production\"\n```\n\n## 🎯 Advanced Features\n\n### Migration Dependencies\n\nDeclare dependencies in your migration files:\n\n```sql\n-- migrations/002__create_posts.sql\n-- DEPENDS: 001__create_users.sql\n\nCREATE TABLE posts (\n    id SERIAL PRIMARY KEY,\n    user_id INTEGER REFERENCES users(id),\n    title VARCHAR(255) NOT NULL,\n    content TEXT\n);\n```\n\n### Environment-Specific Migrations\n\nTag migrations for specific environments:\n\n```sql\n-- migrations/003__dev_data.sql\n-- ENV: dev\n\nINSERT INTO users (name, email) VALUES \n    ('Dev User', 'dev@example.com');\n```\n\n### Down Migrations\n\nAlways include rollback scripts:\n\n```sql\n-- migrations/001__create_users.sql\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(255) NOT NULL\n);\n\n-- DOWN\nDROP TABLE IF EXISTS users;\n```\n\n## 🗄️ Database Support\n\n### PostgreSQL\n```typescript\nconst connectionString = 'postgres://user:pass@localhost/dbname'\n```\n\n### MySQL/MariaDB\n```typescript\nconst connectionString = 'mysql://user:pass@localhost/dbname'\n// or\nconst connectionString = 'mysql2://user:pass@localhost/dbname'\n```\n\n### SQLite\n```typescript\nconst connectionString = 'sqlite://./database.db'\n// or\nconst connectionString = './database.db'\n```\n\n## 📚 API Reference\n\n### MigrateDB Class\n\n```typescript\nclass MigrateDB {\n  async migrate(\n    connectionUrl: string,\n    config?: MigrateDBConfig\n  ): Promise<MigrationResult>\n  \n  async rollback(\n    connectionUrl: string,\n    targetMigration?: string,\n    config?: MigrateDBConfig\n  ): Promise<MigrationResult>\n  \n  async status(\n    connectionUrl: string,\n    config?: MigrateDBConfig\n  ): Promise<StatusResult>\n}\n```\n\n### Configuration Options\n\n```typescript\ninterface MigrateDBConfig {\n  migrationsDir?: string\n  verifyChecksum?: boolean\n  useTransactions?: boolean\n  enableLocking?: boolean\n  logLevel?: 'debug' | 'info' | 'warn' | 'error'\n  dryRun?: boolean\n  environment?: string\n}\n```\n\n## 🧪 Testing\n\nRun tests:\n```bash\nnpm test\n```\n\n## 📝 Migration File Format\n\n### Naming Convention\n- Use timestamp prefix: `YYYYMMDDHHMMSS__description.sql`\n- Or: `001__description.sql`, `002__description.sql`, etc.\n\n### File Structure\n```sql\n-- Optional: Migration metadata\n-- DEPENDS: 001__other_migration.sql\n-- ENV: dev, staging\n\n-- UP Migration\nCREATE TABLE example (\n    id SERIAL PRIMARY KEY\n);\n\n-- DOWN Migration\n-- DOWN\nDROP TABLE IF EXISTS example;\n```\n\n## 🔒 Security\n\n- **Checksum Verification**: Prevents tampering with applied migrations\n- **Transaction Safety**: Automatic rollback on failure\n- **Migration Locking**: Prevents concurrent execution\n- **Validation**: Checks for common SQL issues\n\n## 📄 License\n\nApache-2.0 License\n\n---\n\n**Made with ❤️ for the Node.js community**\n","readmeFilename":"README.md"}