alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
66 lines (60 loc) • 2.31 kB
text/typescript
import { $module, type Alepha } from "alepha";
import { AlephaDateTime } from "alepha/datetime";
import { DbMigrationMode } from "./modes/DbMigrationMode.ts";
import { $entity } from "./primitives/$entity.ts";
import { $sequence } from "./primitives/$sequence.ts";
import { DrizzleKitProvider } from "./providers/DrizzleKitProvider.ts";
import { BunSqliteProvider } from "./providers/drivers/BunSqliteProvider.ts";
import { CloudflareD1Provider } from "./providers/drivers/CloudflareD1Provider.ts";
import { DatabaseProvider } from "./providers/drivers/DatabaseProvider.ts";
import { RepositoryProvider } from "./providers/RepositoryProvider.ts";
import { SequenceProvider } from "./providers/SequenceProvider.ts";
import { databaseEnvSchema } from "./schemas/databaseEnvSchema.ts";
import { PgRelationManager } from "./services/PgRelationManager.ts";
import { QueryManager } from "./services/QueryManager.ts";
import { Repository } from "./services/Repository.ts";
import { SqliteModelBuilder } from "./services/SqliteModelBuilder.ts";
export const SqliteProvider = BunSqliteProvider;
export * from "./index.shared-server.ts";
export * from "./providers/drivers/BunSqliteProvider.ts";
export const AlephaOrm = $module({
name: "alepha.orm",
primitives: [$sequence, $entity],
imports: [AlephaDateTime],
services: [
SqliteModelBuilder,
DrizzleKitProvider,
RepositoryProvider,
SequenceProvider,
PgRelationManager,
QueryManager,
DbMigrationMode,
],
// Variants are tagged with module metadata but never auto-injected.
// - DatabaseProvider is abstract; a driver is substituted in via register().
// - Repository is a base class instantiated per-entity via $repository(entity).
variants: [
DatabaseProvider,
Repository,
BunSqliteProvider,
CloudflareD1Provider,
],
register: (alepha: Alepha) => {
const env = alepha.parseEnv(databaseEnvSchema);
const url = env.DATABASE_URL;
if (url?.startsWith("d1:")) {
alepha.with({
optional: true,
provide: DatabaseProvider,
use: CloudflareD1Provider,
});
} else {
// SQLite is the default for core under Bun
alepha.with({
optional: true,
provide: DatabaseProvider,
use: BunSqliteProvider,
});
}
},
});