everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
66 lines (64 loc) • 2.19 kB
JavaScript
import { existsSync, readFileSync } from "node:fs";
import { dirname, join } from "node:path";
//#region src/db.ts
function normalizeSlug(name) {
return (name.split("/").pop() ?? name).replace(/^@/, "").replace(/[^a-zA-Z0-9_-]/g, "_").replace(/-plugin$/i, "").replace(/-/g, "_").toLowerCase();
}
function getMigrationSlug(dir) {
if (!dir) return normalizeSlug(process.env.npm_package_name ?? "unknown");
let current = dirname(dir);
for (let i = 0; i < 10; i++) {
const pkgPath = join(current, "package.json");
if (existsSync(pkgPath)) try {
return normalizeSlug(JSON.parse(readFileSync(pkgPath, "utf-8")).name ?? current);
} catch {
return normalizeSlug(current);
}
const parent = dirname(current);
if (parent === current) break;
current = parent;
}
return normalizeSlug(dir);
}
function getMigrationStorage(dir) {
return {
schema: "drizzle",
table: `__drizzle_migrations_${getMigrationSlug(dir)}`,
slug: getMigrationSlug(dir)
};
}
function getLegacyCandidates() {
return [{
schema: "drizzle",
table: "__drizzle_migrations"
}, {
schema: "public",
table: "drizzle_migrations"
}];
}
function migrateSql(storage) {
return {
...storage,
qualified: `"${storage.schema}"."${storage.table}"`
};
}
function pluginMigrationSlug(key) {
return (key.split("/").pop() ?? key).replace(/^@/, "").replace(/[^a-zA-Z0-9_-]/g, "_").replace(/-plugin$/i, "").replace(/-/g, "_").toLowerCase();
}
function getDatabaseUrlSecretName(slug) {
return `${slug.toUpperCase().replace(/-/g, "_")}_DATABASE_URL`;
}
function extractExpectedTables(migrations) {
const tables = /* @__PURE__ */ new Set();
const re = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(?:"([^"]+)"\.)?"([^"]+)"/gi;
for (const migration of migrations) for (const stmt of migration.sql) for (const match of stmt.matchAll(re)) {
const schemaName = match[1];
const tableName = match[2];
if (schemaName) tables.add(schemaName);
else if (tableName) tables.add(tableName);
}
return [...tables];
}
//#endregion
export { extractExpectedTables, getDatabaseUrlSecretName, getLegacyCandidates, getMigrationSlug, getMigrationStorage, migrateSql, pluginMigrationSlug };
//# sourceMappingURL=db.mjs.map