{"version":3,"file":"libsql-migrations.mjs","names":[],"sources":["../../src/db/libsql-migrations.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./libsql.js\";\n\nexport interface LibsqlMigrationManifestConfig {\n\turl: string;\n\tauthTokenEnv: string;\n}\n\ninterface ResolvedLibsqlUrl {\n\tconnectionUrl: string;\n\tlabel: string;\n\tidentity: string[];\n\trequiresAuthToken: boolean;\n}\n\nfunction resolveLibsqlUrl(url: unknown, projectRoot: string): ResolvedLibsqlUrl {\n\tif (typeof url !== \"string\" || url.length === 0) {\n\t\tthrow new Error(\"libSQL migration URL is missing.\");\n\t}\n\tif (url.startsWith(\"file:\")) {\n\t\tconst configuredPath = url.slice(5);\n\t\tif (configuredPath.length === 0) throw new Error(\"libSQL migration URL is invalid.\");\n\t\tconst fileUrl = pathToFileURL(resolve(projectRoot, configuredPath));\n\t\treturn {\n\t\t\tconnectionUrl: fileUrl.href,\n\t\t\tlabel: fileUrl.href,\n\t\t\tidentity: [fileUrl.protocol, fileUrl.pathname],\n\t\t\trequiresAuthToken: false,\n\t\t};\n\t}\n\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(url);\n\t} catch {\n\t\tthrow new Error(\"libSQL migration URL is invalid.\");\n\t}\n\tif (parsed.username || parsed.password) {\n\t\tthrow new Error(\"libSQL migration URL must not contain credentials.\");\n\t}\n\tconst label = `${parsed.protocol}//${parsed.host}${parsed.pathname}`;\n\treturn {\n\t\tconnectionUrl: url,\n\t\tlabel,\n\t\tidentity: [parsed.protocol, parsed.host, parsed.pathname],\n\t\trequiresAuthToken: true,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: LibsqlMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst resolvedUrl = resolveLibsqlUrl(manifestConfig.url, context.projectRoot);\n\tconst authToken = resolvedUrl.requiresAuthToken\n\t\t? requireMigrationEnvironment(manifestConfig.authTokenEnv, context.env)\n\t\t: undefined;\n\tconst target = await createMigrationTarget(\"libsql\", resolvedUrl.label, resolvedUrl.identity);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\turl: resolvedUrl.connectionUrl,\n\t\t\t\tauthToken,\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAS,iBAAiB,KAAc,aAAwC;AAC/E,KAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAC7C,OAAM,IAAI,MAAM,mCAAmC;AAEpD,KAAI,IAAI,WAAW,QAAQ,EAAE;EAC5B,MAAM,iBAAiB,IAAI,MAAM,EAAE;AACnC,MAAI,eAAe,WAAW,EAAG,OAAM,IAAI,MAAM,mCAAmC;EACpF,MAAM,UAAU,cAAc,QAAQ,aAAa,eAAe,CAAC;AACnE,SAAO;GACN,eAAe,QAAQ;GACvB,OAAO,QAAQ;GACf,UAAU,CAAC,QAAQ,UAAU,QAAQ,SAAS;GAC9C,mBAAmB;GACnB;;CAGF,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,IAAI;SACd;AACP,QAAM,IAAI,MAAM,mCAAmC;;AAEpD,KAAI,OAAO,YAAY,OAAO,SAC7B,OAAM,IAAI,MAAM,qDAAqD;AAGtE,QAAO;EACN,eAAe;EACf,OAHa,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,OAAO;EAIzD,UAAU;GAAC,OAAO;GAAU,OAAO;GAAM,OAAO;GAAS;EACzD,mBAAmB;EACnB;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAC7B,MAAM,cAAc,iBAAiB,eAAe,KAAK,QAAQ,YAAY;CAC7E,MAAM,YAAY,YAAY,oBAC3B,4BAA4B,eAAe,cAAc,QAAQ,IAAI,GACrE;AAEH,QAAO,8BAA8B;EACpC,QAFc,MAAM,sBAAsB,UAAU,YAAY,OAAO,YAAY,SAAS;EAG5F,qBACC,cAAc;GACb,KAAK,YAAY;GACjB;GACA,CAAC;EACH,CAAC"}