cassandra-codegen
v0.0.9
Published
Generate type definitions from a Cassandra database
Downloads
3,551
Readme
Cassandra Codegen
Generate TypeScript type definitions from a Cassandra (or ScyllaDB) database, as well as type-safe mappers.
Inspired by kysely-codegen.
Example output
CREATE TABLE cyclist_category (
category text,
points int,
id UUID,
last_name text,
PRIMARY KEY (category, points)
) WITH CLUSTERING ORDER BY (points DESC);
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.
Usage instructions
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({...});
Additional instructions
Using query operators
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),
});