{"id":31112099,"url":"https://github.com/yowainwright/prisma-migrations","last_synced_at":"2025-09-17T08:55:37.744Z","repository":{"id":303839630,"uuid":"1016339027","full_name":"yowainwright/prisma-migrations","owner":"yowainwright","description":"prisma with migration tooling","archived":false,"fork":false,"pushed_at":"2025-08-21T04:44:23.000Z","size":426,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-21T05:02:26.070Z","etag":null,"topics":["db-migrations","migrations","orms","prisma-orm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yowainwright.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-08T21:27:18.000Z","updated_at":"2025-08-21T04:44:26.000Z","dependencies_parsed_at":"2025-07-10T01:42:06.697Z","dependency_job_id":"c772d45d-8d86-4d89-b0f0-3bcc7f54af4e","html_url":"https://github.com/yowainwright/prisma-migrations","commit_stats":null,"previous_names":["yowainwright/prisma-migrations"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/yowainwright/prisma-migrations","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yowainwright%2Fprisma-migrations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yowainwright%2Fprisma-migrations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yowainwright%2Fprisma-migrations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yowainwright%2Fprisma-migrations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yowainwright","download_url":"https://codeload.github.com/yowainwright/prisma-migrations/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yowainwright%2Fprisma-migrations/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275563957,"owners_count":25487544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["db-migrations","migrations","orms","prisma-orm"],"created_at":"2025-09-17T08:55:35.263Z","updated_at":"2025-09-17T08:55:37.737Z","avatar_url":"https://github.com/yowainwright.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Prisma Migrations\n\nAssists [Prisma](https://www.prisma.io/docs/orm/prisma-migrate) with migration tooling similar to other js ORMS, like [Knex](https://knexjs.org/guide/migrations.html#rollback)\n\n**Prisma Migrations** is a Node.js library and CLI tool that provides a Knex-like migration management approach for Prisma ORM. Write migrations with familiar `up` and `down` functions while leveraging Prisma's powerful client and type safety.\n\n## Why Use This?\n\n- **Familiar Knex-like API** - `up` and `down` functions you already know\n- **TypeScript First** - Full type safety for your migrations\n- **Prisma Powered** - Use both raw SQL and Prisma operations\n- **Flexible Control** - Run specific migrations, rollback, dry-run\n- **Modern Build** - ESM/CJS dual support, Node.js 20+ ready\n\n## Why Not Just Use Prisma?\n\nPrisma's native migration system is excellent for schema-driven development, but it lacks:\n\n- **No rollback functionality** - Once applied, migrations can't be easily undone\n- **Limited programmatic control** - Can't run specific numbers of migrations or rollback steps\n- **No up/down functions** - Migrations are pure SQL, no TypeScript/JavaScript logic\n- **Schema-only approach** - Difficult to mix schema changes with data seeding/transformation\n- **No granular migration management** - Can't easily target specific migrations or preview changes\n\nThis library complements Prisma by providing the migration management patterns developers expect from other ORMs like Knex, while still leveraging Prisma's powerful client and type safety.\n\n## Installation\n\n```bash\nnpm install prisma-migrations\n```\n\n## Compatibility\n\nThis library is designed to work with modern versions of Prisma and Node.js. Please ensure your environment meets these requirements:\n\n### Minimum Requirements\n\n- **Prisma:** 2.0.0 or higher\n- **Node.js:** 20.0.0 or higher\n\n### Supported Versions\n\n- **Prisma Client:** 4.0.0+ (peer dependency)\n- **Prisma CLI:** 2.0.0+ (peer dependency)\n- **Node.js:** 20.x, 21.x, 22.x, 23.x, 24.x\n\n### Build Formats\n\n- **CommonJS CLI:** Works with Prisma 2.0.0+\n- **ESM CLI:** Works with Prisma 3.15.0+ (requires ES module support)\n- **Library API:** Both ESM and CommonJS builds available\n\n### Notes\n\n- CommonJS CLI (`dist/cli.cjs`) is used by default for maximum compatibility\n- ESM CLI (`dist/cli.js`) available for users with compatible Prisma versions\n- TypeScript migrations require `tsx` to be installed\n- Development and testing: Node.js 24+ is required for unit tests and mocking\n\n## Quick Start\n\n### New Classes and Interfaces\n\n#### CommitManager\n\n- Manages git-related actions.\n- **Methods**:\n  - `getCurrentCommit()`: Retrieve current commit.\n  - `getCurrentBranch()`: Retrieve current branch.\n  - `getCommitsBetween(from, to)`: Get commits between references.\n\n#### VersionManager\n\n- Manages version-based migrations.\n- **Methods**:\n  - `registerVersion(version, migrations)`: Register a version.\n  - `getMigrationsBetween(from, to)`: Determine migrations to run or rollback.\n  - `generateDeploymentPlan(fromVersion, toVersion)`: Generate a plan between versions.\n\n### Interfaces\n\n- **VersionMigrationMapping**: Information associated with migrations for a version.\n- **VersionMigrationOptions**: Options for managing versions.\n- **VersionMigrationResult**: Result structure for version operations.\n\n### CLI Usage\n\n```bash\n# Create a new migration\nprisma-migrations create add_users_table\n\n# Run all pending migrations\nprisma-migrations up\n\n# Run migrations with options\nprisma-migrations up --steps 3\nprisma-migrations up --dry-run\n\n# Rollback migrations\nprisma-migrations down\nprisma-migrations down --steps 2\n\n# Check migration status\nprisma-migrations status\n```\n\n### Programmatic Usage\n\n```javascript\nimport { MigrationManager } from \"prisma-migrations\";\n\nconst manager = new MigrationManager();\n\n// Create a new migration\nawait manager.createMigration({ name: \"add_users_table\" });\n\n// Run all pending migrations\nawait manager.runMigrations();\n\n// Rollback last migration\nawait manager.rollbackMigrations();\n\n// Get migration status\nconst status = await manager.getMigrationStatus();\n```\n\n## Migration Files\n\nWrite migrations with familiar `up` and `down` functions, just like Knex:\n\n```typescript\nimport { PrismaClient } from \"@prisma/client\";\n\nexport async function up(prisma: PrismaClient): Promise\u003cvoid\u003e {\n  // Raw SQL for schema changes\n  await prisma.$executeRaw`\n    CREATE TABLE users (\n      id SERIAL PRIMARY KEY,\n      email VARCHAR(255) UNIQUE NOT NULL,\n      name VARCHAR(255) NOT NULL,\n      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n    )\n  `;\n\n  // Use Prisma operations for data seeding\n  await prisma.user.createMany({\n    data: [\n      { email: \"admin@example.com\", name: \"Admin User\" },\n      { email: \"user@example.com\", name: \"Test User\" },\n    ],\n  });\n}\n\nexport async function down(prisma: PrismaClient): Promise\u003cvoid\u003e {\n  await prisma.$executeRaw`DROP TABLE IF EXISTS users`;\n}\n```\n\n**JavaScript migrations work too:**\n\n```javascript\nexports.up = async function (prisma) {\n  await prisma.$executeRaw`\n    CREATE TABLE posts (\n      id SERIAL PRIMARY KEY,\n      title VARCHAR(255) NOT NULL,\n      user_id INTEGER REFERENCES users(id)\n    )\n  `;\n};\n\nexports.down = async function (prisma) {\n  await prisma.$executeRaw`DROP TABLE IF EXISTS posts`;\n};\n```\n\n## Configuration\n\nPrisma Migrations can be configured in several ways:\n\n### 1. package.json\n\n```json\n{\n  \"prismaMigrations\": {\n    \"migrationsDir\": \"./migrations\",\n    \"schemaPath\": \"./prisma/schema.prisma\",\n    \"tableName\": \"_prisma_migrations\",\n    \"createTable\": true,\n    \"migrationFormat\": \"ts\",\n    \"extension\": \".ts\"\n  }\n}\n```\n\n### 2. Configuration file (prisma-migrations.config.js)\n\n```javascript\nmodule.exports = {\n  migrationsDir: \"./migrations\",\n  schemaPath: \"./prisma/schema.prisma\",\n  tableName: \"_prisma_migrations\",\n  createTable: true,\n  migrationFormat: \"ts\", // 'sql', 'js', or 'ts'\n  extension: \".ts\", // or '.js', '.sql'\n};\n```\n\n### Configuration Options\n\n| Option            | Type                | Default                    | Description                                  |\n| ----------------- | ------------------- | -------------------------- | -------------------------------------------- |\n| `migrationsDir`   | `string`            | `'./migrations'`           | Directory where migration files are stored   |\n| `schemaPath`      | `string`            | `'./prisma/schema.prisma'` | Path to Prisma schema file                   |\n| `tableName`       | `string`            | `'_prisma_migrations'`     | Name of the migrations tracking table        |\n| `createTable`     | `boolean`           | `true`                     | Whether to auto-create the migrations table  |\n| `migrationFormat` | `'sql'\\|'js'\\|'ts'` | `'ts'`                     | Format for new migration files               |\n| `extension`       | `string`            | `'.ts'`                    | File extension for new migrations            |\n| `prismaClient`    | `PrismaClient`      | `undefined`                | Custom PrismaClient instance (for monorepos) |\n\n### 3. Environment Variables\n\nSet `DATABASE_URL` environment variable for database connection.\n\n### 4. Monorepo Support\n\nThe package now includes enhanced support for monorepo structures. It automatically searches for Prisma Client in multiple locations:\n\n- Current working directory\n- Parent directories (up to 5 levels)\n- Common monorepo locations\n- Generated client paths (`node_modules/.prisma/client`)\n\n#### Custom PrismaClient Instance\n\nFor complex monorepo setups, you can provide your own PrismaClient instance:\n\n```javascript\n// prisma-migrations.config.mjs\nimport { PrismaClient } from \"../../../node_modules/@prisma/client\";\n\nexport default {\n  migrationsDir: \"./migrations\",\n  schemaPath: \"./prisma/schema.prisma\",\n  tableName: \"_prisma_migrations\",\n  prismaClient: new PrismaClient(), // Provide your own instance\n};\n```\n\nThis is particularly useful when:\n\n- Your Prisma Client is generated in a non-standard location\n- You're using a workspace with multiple Prisma schemas\n- You need custom PrismaClient configuration\n\n---\n\n## API\n\n### CLI Commands\n\n#### `prisma-migrations create \u003cname\u003e`\n\nCreate a new migration file.\n\n**Parameters:**\n\n- `\u003cname\u003e`: Migration name (string)\n\n**Example:**\n\n```bash\nprisma-migrations create add_users_table\nprisma-migrations create \"update user schema\"\n```\n\n---\n\n#### `prisma-migrations up [options]`\n\nRun all pending migrations or specific migrations.\n\n**Options:**\n\n- `-t, --to \u003ctimestamp\u003e`: Run up to a specific migration\n- `-s, --steps \u003cnumber\u003e`: Run a specific number of migrations\n- `-d, --dry-run`: Preview migrations without applying\n\n**Examples:**\n\n```bash\n# Run all pending migrations\nprisma-migrations up\n\n# Run up to a specific migration\nprisma-migrations up --to 20231201120000\n\n# Run next 3 migrations\nprisma-migrations up --steps 3\n\n# Preview without applying\nprisma-migrations up --dry-run\n```\n\n---\n\n#### `prisma-migrations down [options]`\n\nRollback migrations.\n\n**Options:**\n\n- `-t, --to \u003ctimestamp\u003e`: Rollback to a specific migration\n- `-s, --steps \u003cnumber\u003e`: Rollback a specific number of migrations\n- `-d, --dry-run`: Preview rollback without applying\n\n**Examples:**\n\n```bash\n# Rollback last migration\nprisma-migrations down\n\n# Rollback to a specific migration\nprisma-migrations down --to 20231201120000\n\n# Rollback last 2 migrations\nprisma-migrations down --steps 2\n\n# Preview rollback\nprisma-migrations down --dry-run\n```\n\n---\n\n#### `prisma-migrations status`\n\nGet the status of all migrations.\n\n**Example:**\n\n```bash\nprisma-migrations status\n```\n\n**Output:**\n\n```\nadd_users_table [applied] - 2023-12-01T12:00:00.000Z\nadd_posts_table [pending] - Pending\nupdate_users_schema [applied] - 2023-12-01T13:00:00.000Z\n```\n\n---\n\n#### `prisma-migrations test`\n\nTest database connection.\n\n**Example:**\n\n```bash\nprisma-migrations test\n```\n\n---\n\n### Programmatic API\n\n#### `MigrationManager(configPath?)`\n\nMain class for managing migrations programmatically.\n\n**Parameters:**\n\n- `configPath?`: Optional path to configuration file (string)\n\n**Example:**\n\n```javascript\nimport { MigrationManager } from \"prisma-migrations\";\n\nconst manager = new MigrationManager(\"./custom-config.js\");\n```\n\n---\n\n#### `manager.createMigration(options)`\n\nCreate a new migration file.\n\n**Parameters:**\n\n- `options`: CreateMigrationOptions object\n  - `name`: Migration name (string)\n  - `directory?`: Optional custom directory (string)\n  - `template?`: Optional custom template (MigrationTemplate)\n\n**Returns:** `Promise\u003cMigrationFile\u003e`\n\n**Example:**\n\n```javascript\nconst migration = await manager.createMigration({\n  name: \"add_users_table\",\n  template: {\n    up: \"CREATE TABLE users (id SERIAL PRIMARY KEY);\",\n    down: \"DROP TABLE users;\",\n  },\n});\n```\n\n---\n\n#### `manager.runMigrations(options?)`\n\nRun pending migrations.\n\n**Parameters:**\n\n- `options?`: RunMigrationOptions object\n  - `to?`: Run up to specific migration (string)\n  - `steps?`: Number of migrations to run (number)\n  - `dryRun?`: Preview without applying (boolean)\n  - `force?`: Force run even if already applied (boolean)\n\n**Returns:** `Promise\u003cMigrationResult\u003e`\n\n**Example:**\n\n```javascript\n// Run all pending migrations\nconst result = await manager.runMigrations();\n\n// Run with options\nconst result = await manager.runMigrations({\n  steps: 3,\n  dryRun: true,\n});\n```\n\n---\n\n#### `manager.rollbackMigrations(options?)`\n\nRollback applied migrations.\n\n**Parameters:**\n\n- `options?`: RollbackMigrationOptions object\n  - `to?`: Rollback to specific migration (string)\n  - `steps?`: Number of migrations to rollback (number)\n  - `dryRun?`: Preview without applying (boolean)\n  - `force?`: Force rollback even without down script (boolean)\n\n**Returns:** `Promise\u003cMigrationResult\u003e`\n\n**Example:**\n\n```javascript\n// Rollback last migration\nconst result = await manager.rollbackMigrations();\n\n// Rollback with options\nconst result = await manager.rollbackMigrations({\n  steps: 2,\n  dryRun: true,\n});\n```\n\n---\n\n#### `manager.getMigrationStatus()`\n\nGet status of all migrations.\n\n**Returns:** `Promise\u003cMigrationStatus[]\u003e`\n\n**Example:**\n\n```javascript\nconst statuses = await manager.getMigrationStatus();\nstatuses.forEach((status) =\u003e {\n  console.log(`${status.name} [${status.status}]`);\n});\n```\n\n---\n\n#### `manager.getMigrationState()`\n\nGet detailed migration state information.\n\n**Returns:** `Promise\u003cMigrationState\u003e`\n\n**Example:**\n\n```javascript\nconst state = await manager.getMigrationState();\nconsole.log(\"Applied:\", state.applied.length);\nconsole.log(\"Pending:\", state.pending.length);\n```\n\n---\n\n#### `manager.testConnection()`\n\nTest database connection.\n\n**Returns:** `Promise\u003cboolean\u003e`\n\n**Example:**\n\n```javascript\nconst isConnected = await manager.testConnection();\nif (isConnected) {\n  console.log(\"Database connection successful\");\n}\n```\n\n---\n\n### Configuration Classes\n\n#### `ConfigManager(configPath?)`\n\nManages configuration loading and access.\n\n**Methods:**\n\n- `getConfig()`: Get current configuration\n- `updateConfig(updates)`: Update configuration\n- `getDatabaseUrl()`: Get database URL from various sources\n\n---\n\n#### `FileManager(migrationsDir)`\n\nManages migration file operations.\n\n**Methods:**\n\n- `createMigrationFile(name, template?)`: Create new migration file\n- `readMigrationFiles()`: Read all migration files\n- `getMigrationFile(timestamp)`: Get specific migration file\n- `getMigrationByName(name)`: Find migration by name\n- `parseMigrationContent(content)`: Parse UP/DOWN sections\n\n---\n\n#### `DatabaseAdapter(databaseUrl, tableName?)`\n\nHandles database operations and migration tracking.\n\n**Methods:**\n\n- `connect()`: Connect to database\n- `disconnect()`: Disconnect from database\n- `getAppliedMigrations()`: Get all applied migrations\n- `recordMigration(id, name)`: Record migration as applied\n- `removeMigration(id)`: Remove migration record\n- `executeMigration(sql)`: Execute migration SQL\n\n---\n\n### Type Definitions\n\n#### `MigrationConfig`\n\n```typescript\ninterface MigrationConfig {\n  migrationsDir: string;\n  schemaPath: string;\n  databaseUrl?: string;\n  tableName?: string;\n  createTable?: boolean;\n}\n```\n\n#### `Migration`\n\n```typescript\ninterface Migration {\n  id: string;\n  name: string;\n  filename: string;\n  timestamp: Date;\n  applied: boolean;\n  appliedAt?: Date;\n  rollback?: string;\n}\n```\n\n#### `MigrationResult`\n\n```typescript\ninterface MigrationResult {\n  success: boolean;\n  migrations: Migration[];\n  error?: string;\n}\n```\n\n#### `MigrationStatus`\n\n```typescript\ninterface MigrationStatus {\n  id: string;\n  name: string;\n  status: \"pending\" | \"applied\" | \"error\";\n  appliedAt?: Date;\n  error?: string;\n}\n```\n\n---\n\n### Migration File Formats\n\nPrisma Migrations supports both SQL and JavaScript/TypeScript migration files:\n\n#### SQL Format (Traditional)\n\n```sql\n-- UP\nCREATE TABLE users (\n  id SERIAL PRIMARY KEY,\n  email VARCHAR(255) UNIQUE NOT NULL,\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\n-- DOWN\nDROP TABLE users;\n```\n\n#### JavaScript/TypeScript Format (Knex-like)\n\n**TypeScript (.ts files):**\n\n```typescript\nimport { PrismaClient } from \"@prisma/client\";\n\nexport async function up(prisma: PrismaClient): Promise\u003cvoid\u003e {\n  // Raw SQL approach\n  await prisma.$executeRaw`\n    CREATE TABLE users (\n      id SERIAL PRIMARY KEY,\n      email VARCHAR(255) UNIQUE NOT NULL,\n      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n      updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n    )\n  `;\n\n  // Or use Prisma operations for data seeding\n  await prisma.user.createMany({\n    data: [{ email: \"admin@example.com\" }, { email: \"user@example.com\" }],\n  });\n}\n\nexport async function down(prisma: PrismaClient): Promise\u003cvoid\u003e {\n  await prisma.$executeRaw`DROP TABLE IF EXISTS users`;\n}\n```\n\n**JavaScript (.js files):**\n\n```javascript\nexports.up = async function (prisma) {\n  await prisma.$executeRaw`\n    CREATE TABLE users (\n      id SERIAL PRIMARY KEY,\n      email VARCHAR(255) UNIQUE NOT NULL,\n      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n    )\n  `;\n};\n\nexports.down = async function (prisma) {\n  await prisma.$executeRaw`DROP TABLE IF EXISTS users`;\n};\n```\n\n#### Configuration\n\nSet the migration format in your configuration:\n\n```javascript\n// prisma-migrations.config.js\nmodule.exports = {\n  migrationFormat: \"ts\", // 'sql', 'js', or 'ts'\n  migrationsDir: \"./migrations\",\n  // ... other options\n};\n```\n\n**Note:** TypeScript migrations require `tsx` to be installed:\n\n```bash\nnpm install tsx\n```\n\n---\n\n## Version-Based Migration Management\n\nManage migrations using git commits or semantic versioning for deployment and rollback scenarios.\n\n### Git Commit-Based Migrations\n\n```javascript\n// Deploy to specific commit\nconst manager = new MigrationManager();\nconst commitSha = \"abc123\";\nconst migrations = await manager.getMigrationsByCommit(commitSha);\nawait manager.runMigrations({ to: migrations[migrations.length - 1].id });\n\n// Rollback to previous commit\nconst previousCommit = \"def456\";\nconst targetMigrations = await manager.getMigrationsByCommit(previousCommit);\nawait manager.rollbackMigrations({\n  to: targetMigrations[targetMigrations.length - 1].id,\n});\n```\n\n### Semantic Versioning\n\n```javascript\n// Register version with migrations\nconst manager = new MigrationManager();\nawait manager.registerVersion(\"1.2.0\", [\"20231201120000\", \"20231201130000\"]);\n\n// Deploy to version\nawait manager.deployToVersion(\"1.2.0\");\n\n// Rollback to previous version\nawait manager.rollbackToVersion(\"1.1.0\");\n```\n\n### CLI Usage\n\n```bash\n# Deploy to git commit\nprisma-migrations up --commit abc123\n\n# Rollback to commit\nprisma-migrations down --commit def456\n\n# Deploy to version\nprisma-migrations up --version 1.2.0\n\n# Rollback to version\nprisma-migrations down --version 1.1.0\n```\n\n---\n\n## Development\n\nUse [Corepack](https://nodejs.org/api/corepack.html) to manage Yarn and ensure you have the latest Node and npm.\n\n```bash\ncorepack enable\nnpm install\n```\n\n### Key Tasks\n\n- `npm run build` - Build the TypeScript source\n- `npm test` - Run unit tests\n- `npm run test:docker` - Run end-to-end tests in Docker\n- `npm run lint` - Run oxlint on source code\n- `npm run format` - Format code with prettier\n\nUse `npm run` commands for task execution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyowainwright%2Fprisma-migrations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyowainwright%2Fprisma-migrations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyowainwright%2Fprisma-migrations/lists"}