@harperfast/schema-codegen
v1.0.10
Published
Generate useful types from your Harper database schemas
Downloads
901
Keywords
Readme
@HarperFast/Schema-Codegen
Schema Codegen will generate TypeScript types for your GraphQL schemas, making it easier to work with your data in TypeScript and JavaScript applications.
Installation
Install this with your favorite package manager!
npm install --save @harperfast/schema-codegenDrop this in your Harper application's config.yaml:
'@harperfast/schema-codegen':
package: '@harperfast/schema-codegen'
globalTypes: 'schemas/globalTypes.d.ts'
schemaTypes: 'schemas/types.ts'Alternatively, if you are using pure JavaScript, you can generate JSDoc instead:
'@harperfast/schema-codegen':
package: '@harperfast/schema-codegen'
jsdoc: 'schemas/jsdocTypes.js'When you harper dev, it will generate types based on the schema that's actually in your Harper database. If you change the schema, we will automatically regenerate the types for you.
Example
For example, here's a tracks.graphql schema:
type Tracks @table @sealed {
id: ID @primaryKey
name: String! @indexed
mp3: Blob
}Next to it, a schemas/types.ts file will get generated with this:
/**
Generated from HarperDB schema
Manual changes will be lost!
> harper dev .
*/
export interface Track {
id: string;
name: string;
mp3?: any;
}
export type NewTrack = Omit<Track, 'id'>;
export type Tracks = Track[];
export type { Track as TrackRecord };
export type TrackRecords = Track[];
export type NewTrackRecord = Omit<Track, 'id'>;An ambient declaration will also be generated in globalTypes.d.ts to enhance the global tables and databases from Harper:
/**
Generated from your schema files
Manual changes will be lost!
> harper dev .
*/
import type { Table } from 'harperdb';
import type { Track } from './types.ts';
declare module 'harperdb' {
export const tables: {
Tracks: { new (...args: any[]): Table<Track> };
};
export const databases: {
data: {
Tracks: { new (...args: any[]): Table<Track> };
};
};
}Development
To use this in an application, first link it:
git clone [email protected]:HarperFast/schema-codegen.git
cd schema-codegen
npm linkThen cd to your awesome application you want to test this with:
cd ~/my-awesome-app
npm link @harperfast/schema-codegen