Schema Codegen will generate TypeScript types for your GraphQL schemas, making it easier to work with your data in TypeScript and JavaScript applications.
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.
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> };
};
};
}To use this in an application, first link it:
git clone git@github.com: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