Skip to content

Connection

Source: src/Prisma/Connection.ts

A Prisma database connection/API key.

const connection = yield* Prisma.Connection("api", {
database: database.databaseId,
});

Pass database URLs to Compute env

const connection = yield* Prisma.Connection("api", {
database,
});
const app = yield* Prisma.Compute("api", {
project,
appName: "api",
main: import.meta.filename,
env: {
DATABASE_URL: connection.databaseUrl,
DIRECT_URL: connection.directConnectionString,
},
});

Use a connection inside an Effect-native Compute app

export default Prisma.Compute(
"api",
{ project, appName: "api", main: import.meta.filename },
Effect.gen(function* () {
const db = yield* Prisma.Connect(connection);
const sql = yield* SQL.Postgres({ url: db.databaseUrl });
return {
fetch: Effect.gen(function* () {
const users = yield* sql`SELECT * FROM users`;
return yield* HttpServerResponse.json(users);
}),
};
}).pipe(Effect.provide(Prisma.ConnectBinding)),
);

Use a connection inside an Effect-native Lambda function

export default AWS.Lambda.Function(
"api",
{ main: import.meta.filename, url: true },
Effect.gen(function* () {
const db = yield* Prisma.Connect(connection);
const sql = yield* SQL.Postgres({ url: db.databaseUrl });
return {
fetch: Effect.gen(function* () {
const users = yield* sql`SELECT * FROM users`;
return yield* HttpServerResponse.json(users);
}),
};
}).pipe(Effect.provide(Prisma.ConnectBinding)),
);

Use a connection inside an Effect-native Cloudflare Worker

export default Cloudflare.Worker(
"api",
{ main: import.meta.filename },
Effect.gen(function* () {
const db = yield* Prisma.Connect(connection);
return {
fetch: Effect.gen(function* () {
const databaseUrl = yield* db.databaseUrl;
return yield* HttpServerResponse.text("connected");
}),
};
}).pipe(Effect.provide(Prisma.ConnectBinding)),
);
const hyperdrive = yield* Cloudflare.Hyperdrive.Connection("api-hd", {
origin: connection.origin.as<Prisma.PostgresOrigin>(),
});
export default Cloudflare.Worker(
"api",
{ main: import.meta.filename, compatibility: { flags: ["nodejs_compat"] } },
Effect.gen(function* () {
const hd = yield* Cloudflare.Hyperdrive.Connect(hyperdrive);
const sql = yield* SQL.Postgres({ url: hd.connectionString });
return {
fetch: Effect.gen(function* () {
const users = yield* sql`SELECT * FROM users`;
return yield* HttpServerResponse.json(users);
}),
};
}).pipe(Effect.provide(Cloudflare.Hyperdrive.ConnectBinding)),
);