{"version":3,"file":"postgres-migrations.mjs","names":[],"sources":["../../src/db/postgres-migrations.ts"],"sourcesContent":["import { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./postgres.js\";\n\nexport interface PostgresMigrationManifestConfig {\n\tconnectionStringEnv: string;\n}\n\ninterface PostgresTargetIdentity {\n\thost: string;\n\tport: string;\n\tdatabase: string;\n}\n\nfunction parseTargetIdentity(connectionString: string): PostgresTargetIdentity {\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(connectionString);\n\t} catch {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tif (parsed.protocol !== \"postgres:\" && parsed.protocol !== \"postgresql:\") {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tconst database = parsed.pathname.slice(1);\n\tif (!parsed.hostname || !database) {\n\t\tthrow new Error(\"PostgreSQL migration connection string must identify a host and database.\");\n\t}\n\treturn {\n\t\thost: parsed.hostname,\n\t\tport: parsed.port || \"5432\",\n\t\tdatabase,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: PostgresMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst connectionStringEnv =\n\t\tcontext.overrides?.databaseUrlEnv ?? manifestConfig.connectionStringEnv;\n\tconst connectionString = requireMigrationEnvironment(connectionStringEnv, context.env);\n\tconst identity = parseTargetIdentity(connectionString);\n\tconst label = `${identity.host}:${identity.port}/${identity.database}`;\n\tconst target = await createMigrationTarget(\"postgres\", label, [\n\t\tidentity.host,\n\t\tidentity.port,\n\t\tidentity.database,\n\t]);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\tconnectionString,\n\t\t\t\tpool: { min: 0, max: 1 },\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,oBAAoB,kBAAkD;CAC9E,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,iBAAiB;SAC3B;AACP,QAAM,IAAI,MAAM,qDAAqD;;AAEtE,KAAI,OAAO,aAAa,eAAe,OAAO,aAAa,cAC1D,OAAM,IAAI,MAAM,qDAAqD;CAEtE,MAAM,WAAW,OAAO,SAAS,MAAM,EAAE;AACzC,KAAI,CAAC,OAAO,YAAY,CAAC,SACxB,OAAM,IAAI,MAAM,4EAA4E;AAE7F,QAAO;EACN,MAAM,OAAO;EACb,MAAM,OAAO,QAAQ;EACrB;EACA;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAG7B,MAAM,mBAAmB,4BADxB,QAAQ,WAAW,kBAAkB,eAAe,qBACqB,QAAQ,IAAI;CACtF,MAAM,WAAW,oBAAoB,iBAAiB;AAOtD,QAAO,8BAA8B;EACpC,QANc,MAAM,sBAAsB,YAD7B,GAAG,SAAS,KAAK,GAAG,SAAS,KAAK,GAAG,SAAS,YACE;GAC7D,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC;EAGD,qBACC,cAAc;GACb;GACA,MAAM;IAAE,KAAK;IAAG,KAAK;IAAG;GACxB,CAAC;EACH,CAAC"}