@prisma/sdk
Version:
182 lines (181 loc) • 6.53 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var migrateEngineCommands_exports = {};
__export(migrateEngineCommands_exports, {
MigrateEngineExitCode: () => MigrateEngineExitCode,
canConnectToDatabase: () => canConnectToDatabase,
createDatabase: () => createDatabase,
dropDatabase: () => dropDatabase,
execaCommand: () => execaCommand
});
module.exports = __toCommonJS(migrateEngineCommands_exports);
var import_fetch_engine = require("@prisma/fetch-engine");
var import_execa = __toESM(require("execa"));
var import_fs = __toESM(require("fs"));
var import_util = require("util");
var import_resolveBinary = require("./resolveBinary");
const exists = (0, import_util.promisify)(import_fs.default.exists);
var MigrateEngineExitCode = /* @__PURE__ */ ((MigrateEngineExitCode2) => {
MigrateEngineExitCode2[MigrateEngineExitCode2["Success"] = 0] = "Success";
MigrateEngineExitCode2[MigrateEngineExitCode2["Error"] = 1] = "Error";
MigrateEngineExitCode2[MigrateEngineExitCode2["Panic"] = 101] = "Panic";
return MigrateEngineExitCode2;
})(MigrateEngineExitCode || {});
function parseJsonFromStderr(stderr) {
const lines = stderr.split(/\r?\n/).slice(1);
const logs = [];
for (const line of lines) {
const data = String(line);
try {
const json = JSON.parse(data);
logs.push(json);
} catch (e) {
throw new Error(`Could not parse migration engine response: ${e}`);
}
}
return logs;
}
__name(parseJsonFromStderr, "parseJsonFromStderr");
async function canConnectToDatabase(connectionString, cwd = process.cwd(), migrationEnginePath) {
if (!connectionString) {
throw new Error("Connection url is empty. See https://www.prisma.io/docs/reference/database-reference/connection-urls");
}
try {
await execaCommand({
connectionString,
cwd,
migrationEnginePath,
engineCommandName: "can-connect-to-database"
});
} catch (_e) {
const e = _e;
if (e.stderr) {
const logs = parseJsonFromStderr(e.stderr);
const error = logs.find((it) => it.level === "ERROR" && it.target === "migration_engine::logger");
if (error && error.fields.error_code && error.fields.message) {
return {
code: error.fields.error_code,
message: error.fields.message
};
} else {
throw new Error(`Migration engine error:
${logs.map((log) => log.fields.message).join("\n")}`);
}
} else {
throw new Error(`Migration engine exited.`);
}
}
return true;
}
__name(canConnectToDatabase, "canConnectToDatabase");
async function createDatabase(connectionString, cwd = process.cwd(), migrationEnginePath) {
const dbExists = await canConnectToDatabase(connectionString, cwd, migrationEnginePath);
if (dbExists === true) {
return false;
}
try {
await execaCommand({
connectionString,
cwd,
migrationEnginePath,
engineCommandName: "create-database"
});
return true;
} catch (_e) {
const e = _e;
if (e.stderr) {
const logs = parseJsonFromStderr(e.stderr);
const error = logs.find((it) => it.level === "ERROR" && it.target === "migration_engine::logger");
if (error && error.fields.error_code && error.fields.message) {
throw new Error(`${error.fields.error_code}: ${error.fields.message}`);
} else {
throw new Error(`Migration engine error:
${logs.map((log) => log.fields.message).join("\n")}`);
}
} else {
throw new Error(`Migration engine exited.`);
}
}
}
__name(createDatabase, "createDatabase");
async function dropDatabase(connectionString, cwd = process.cwd(), migrationEnginePath) {
try {
const result = await execaCommand({
connectionString,
cwd,
migrationEnginePath,
engineCommandName: "drop-database"
});
if (result && result.exitCode === 0 && result.stderr.includes("The database was successfully dropped")) {
return true;
} else {
throw Error(`An error occurred during the drop: ${JSON.stringify(result, void 0, 2)}`);
}
} catch (e) {
if (e.stderr) {
const logs = parseJsonFromStderr(e.stderr);
throw new Error(`Migration engine error:
${logs.map((log) => log.fields.message).join("\n")}`);
} else {
throw new Error(`Migration engine exited.`);
}
}
}
__name(dropDatabase, "dropDatabase");
async function execaCommand({
connectionString,
cwd,
migrationEnginePath,
engineCommandName
}) {
migrationEnginePath = migrationEnginePath || await (0, import_resolveBinary.resolveBinary)(import_fetch_engine.BinaryType.migrationEngine);
try {
return await (0, import_execa.default)(migrationEnginePath, ["cli", "--datasource", connectionString, engineCommandName], {
cwd,
env: {
RUST_BACKTRACE: "1",
RUST_LOG: "info"
}
});
} catch (_e) {
const e = _e;
if (e.message) {
e.message = e.message.replace(connectionString, "<REDACTED>");
}
if (e.stdout) {
e.stdout = e.stdout.replace(connectionString, "<REDACTED>");
}
if (e.stderr) {
e.stderr = e.stderr.replace(connectionString, "<REDACTED>");
}
throw e;
}
}
__name(execaCommand, "execaCommand");
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
MigrateEngineExitCode,
canConnectToDatabase,
createDatabase,
dropDatabase,
execaCommand
});