Generate TypeScript type definitions from a Cassandra (or ScyllaDB) database, as well as type-safe mappers.
Inspired by kysely-codegen.
Existing Cassandra table | Resulting TypeScript type |
|
export interface CyclistCategoryRow {
category: PartitionKey<string>;
points: Clustering<number, 'desc'>;
id?: types.Uuid | null;
lastName?: string | null;
} |
Additionally, a mapper named cyclistCategoryMapper
is generated, which is similar to the mapper provided by cassandra-driver
, but is more type-safe due to the type annotations specifying partition key & clustering columns.
-
Install using
npm install cassandra-codegen
. -
In your project, run:
cassandra-codegen --host <host> --port <port> --datacenter <datacenter> --username <username> --password <password> --keyspace <keyspace>
Notes:
- Run
cassandra-codegen -h
for extra CLI options. - You may have to run
npm exec cassandra-codegen -- <args>
, depending on your environment.
- Run
-
In your code (usually inside some
init
function), add the following call:import { initMappers } from "cassandra-codegen"; // The argument should be a connected `cassandra-driver` client. await initMappers(cassandra);
-
You can now use the generated mappers wherever you need them:
import { cyclistCategoryMapper } from "cassandra-codegen"; const cyclistCategory = await cyclistCategoryMapper.get({...});
You can use the query operators available in cassandra-driver
in a type-safe manner.
For example:
import { cyclistCategoryMapper, queryOperator } from "cassandra-codegen";
await cyclistCategoryMapper.find({
category: 'GC',
points: queryOperator.gte(42),
});