@shirokuma-library/mcp-knowledge-base
Version:
MCP server for AI-powered knowledge management with semantic search, graph analysis, and automatic enrichment
114 lines (88 loc) • 3.25 kB
text/typescript
import fs from 'fs';
import path from 'path';
/**
* Setup Prisma migrations for the current DATABASE_URL environment
* Creates migration directory structure based on DATABASE_URL location
*/
function getDatabasePath(): string {
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl) {
throw new Error('DATABASE_URL environment variable is required');
}
// Handle file:// URLs
let dbPath = databaseUrl;
if (dbPath.startsWith('file://')) {
dbPath = dbPath.replace('file://', '');
} else if (dbPath.startsWith('file:')) {
dbPath = dbPath.replace('file:', '');
}
return dbPath;
}
function setupMigrationDirectory(): string {
const dbPath = getDatabasePath();
const dbDir = path.dirname(dbPath);
const migrationsDir = path.join(dbDir, 'migrations');
// Ensure the database directory exists
if (!fs.existsSync(dbDir)) {
fs.mkdirSync(dbDir, { recursive: true });
console.log(`Created database directory: ${dbDir}`);
}
// Ensure the migrations directory exists
if (!fs.existsSync(migrationsDir)) {
fs.mkdirSync(migrationsDir, { recursive: true });
console.log(`Created migrations directory: ${migrationsDir}`);
}
return migrationsDir;
}
function createPrismaEnvironment(): string {
const migrationsDir = setupMigrationDirectory();
// Set PRISMA_MIGRATION_PATH for this process
process.env.PRISMA_MIGRATION_PATH = migrationsDir;
console.log(`Database URL: ${process.env.DATABASE_URL}`);
console.log(`Migrations directory: ${migrationsDir}`);
return migrationsDir;
}
function showHelp() {
console.log(`
Shirokuma Database Migration Setup
This script sets up Prisma migrations based on the DATABASE_URL environment variable.
Migrations will be stored alongside the database file for easy portability.
Usage:
npm run setup-migrations
Environment variables:
DATABASE_URL - Required. Points to the SQLite database file location.
Examples:
DATABASE_URL=file:///home/user/.shirokuma/data/shirokuma.db npm run setup-migrations
DATABASE_URL=file:./local/shirokuma.db npm run setup-migrations
`);
}
async function main() {
try {
if (process.argv.includes('--help') || process.argv.includes('-h')) {
showHelp();
return;
}
const migrationsDir = createPrismaEnvironment();
// Create a .env file in the migrations directory for reference
const envContent = `# Shirokuma Database Configuration
DATABASE_URL=${process.env.DATABASE_URL}
PRISMA_MIGRATION_PATH=${migrationsDir}
# Generated on: ${new Date().toISOString()}
`;
const envPath = path.join(path.dirname(migrationsDir), '.env');
fs.writeFileSync(envPath, envContent);
console.log(`Created environment reference: ${envPath}`);
console.log('\n✅ Migration setup complete!');
console.log('\nNext steps:');
console.log(' 1. Run: npx prisma migrate dev --name init');
console.log(' 2. Or: npx prisma db push (for schema sync without migrations)');
} catch (error) {
console.error('❌ Migration setup failed:', error.message);
process.exit(1);
}
}
if (import.meta.url === `file://${process.argv[1]}`) {
main();
}
export { createPrismaEnvironment, setupMigrationDirectory };