scripts/d1-config.mjs
Rama main · réplica de lectura del repositorio original.
import { resolve } from "node:path";
export const localD1Ids = [
"00000000-0000-0000-0000-000000000001",
"00000000-0000-0000-0000-000000000002",
];
export function getD1Bindings(config, { local = false } = {}) {
const bindings = ["DEVPUSH_DATABASE", "DEVPUSH_LOG_DATABASE"].map(
(binding) => {
const matches =
config.d1_databases?.filter((item) => item.binding === binding) ?? [];
if (matches.length !== 1)
throw new Error(`Configure exactly one ${binding} D1 binding.`);
const item = matches[0];
if (!item.database_name?.trim() || !item.migrations_dir?.trim())
throw new Error(
`${binding} needs a database name and migrations directory.`,
);
if (!item.database_id)
throw new Error(
`${binding} needs a database ID, including for local development.`,
);
if (
!local &&
(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
item.database_id ?? "",
) ||
/^0+$/.test(item.database_id.replaceAll("-", "")) ||
localD1Ids.includes(item.database_id))
)
throw new Error(
`${binding} needs a configured D1 database ID. Run pnpm configure.`,
);
return item;
},
);
const [main, logs] = bindings;
if (
main.database_name === logs.database_name ||
(main.database_id &&
main.database_id.toLowerCase() === logs.database_id?.toLowerCase()) ||
resolve(main.migrations_dir) === resolve(logs.migrations_dir)
)
throw new Error(
"Main data and logs must use different D1 databases and migration directories.",
);
return bindings;
}