@netlify/build
Version:
Netlify build module
52 lines (51 loc) • 1.89 kB
JavaScript
import { readdir, stat } from 'node:fs/promises';
import { join, resolve } from 'node:path';
import { pathExists } from 'path-exists';
// TODO: Remove once we drop support for the legacy `netlify/db/migrations` directory.
const LEGACY_DB_MIGRATIONS_SRC = 'netlify/db/migrations';
/**
* Returns the effective migrations source directory for the current build.
*
* If the user has set `database.migrations.path` in their config, or the new
* default `netlify/database/migrations` directory exists, that value will have
* been populated into `constants.DB_MIGRATIONS_SRC` upstream. If not, we fall
* back to the legacy `netlify/db/migrations` directory for backwards
* compatibility.
*/
// TODO: Remove the legacy fallback once we drop support for `netlify/db/migrations`.
export const getMigrationsSrc = async (buildDir, configuredSrc) => {
if (configuredSrc) {
return configuredSrc;
}
if (await pathExists(resolve(buildDir, LEGACY_DB_MIGRATIONS_SRC))) {
return LEGACY_DB_MIGRATIONS_SRC;
}
return undefined;
};
export const readMigrationEntries = async (buildDir, migrationsSrc) => {
const empty = { dirNames: [], fileNames: [] };
if (!migrationsSrc) {
return empty;
}
const srcDir = resolve(buildDir, migrationsSrc);
if (!(await pathExists(srcDir))) {
return empty;
}
const entries = await readdir(srcDir);
const dirNames = [];
const fileNames = [];
for (const entry of entries) {
const entryStat = await stat(join(srcDir, entry));
if (entryStat.isDirectory()) {
dirNames.push(entry);
}
else if (entry.endsWith('.sql')) {
fileNames.push(entry);
}
}
return { dirNames, fileNames };
};
export const getMigrationNames = ({ dirNames, fileNames }) => [
...dirNames,
...fileNames.map((f) => f.replace(/\.sql$/, '')),
];