Skip to content

Commit

Permalink
feat: generate update schemas derived from the insert schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
sirctseb committed Jan 26, 2023
1 parent 452f587 commit e32b2d6
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 1 deletion.
14 changes: 14 additions & 0 deletions src/generator/Generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ import { CaseFunction, Transformations } from './types'
import UtilityTypesBuilder from './builders/UtilityTypesBuilder'
import ZodSchemaBuilder from './builders/ZodSchemaBuilder'
import SingleNamedImportBuilder from './builders/SingleNamedImportBuilder'
import UpdateSchemaBuilder from './builders/UpdateSchemaBuilder'

export interface GeneratorOptions {
schema: SchemaInfo
genSelectSchemas?: boolean
genInsertSchemas?: boolean
genUpdateSchemas?: boolean
genTableMetadata?: boolean
disableEslint?: boolean
/** @deprecated */
Expand Down Expand Up @@ -57,6 +59,7 @@ export default class Generator {
public readonly generate: {
selectSchemas: boolean
insertSchemas: boolean
updateSchemas: boolean
tableMetadata: boolean
disableEslint: boolean
/** @deprecated */
Expand All @@ -77,6 +80,7 @@ export default class Generator {
schema,
genSelectSchemas: selectSchemas = true,
genInsertSchemas: insertSchemas = true,
genUpdateSchemas: updateSchemas = true,
genTableMetadata: tableMetadata = true,
disableEslint = true,
genEnums = false,
Expand All @@ -99,6 +103,7 @@ export default class Generator {
this.generate = Object.freeze({
selectSchemas,
insertSchemas,
updateSchemas,
tableMetadata,
disableEslint,
enums: genEnums,
Expand Down Expand Up @@ -231,6 +236,15 @@ export default class Generator {
builders.push(builder)
}

if (this.generate.updateSchemas) {
const builder = new UpdateSchemaBuilder(
tableInfo,
this.types,
this.transform
)
builders.push(builder)
}

if (this.generate.tables) {
const builder = new TableBuilder(tableInfo, this.types, this.transform)
this.types.add(builder.name, builder.typename().text, 'table')
Expand Down
6 changes: 6 additions & 0 deletions src/generator/__tests__/Generator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: false,
genInsertTypes: false,
genTables: false,
Expand All @@ -61,6 +62,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: false,
genInsertTypes: false,
genTables: true,
Expand All @@ -80,6 +82,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: true,
genInsertTypes: false,
genTables: false,
Expand All @@ -98,6 +101,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: false,
genInsertTypes: true,
genTables: false,
Expand All @@ -117,6 +121,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: false,
genInsertTypes: false,
genTables: false,
Expand All @@ -136,6 +141,7 @@ describe(Generator, () => {
genTableMetadata: false,
genSelectSchemas: false,
genInsertSchemas: false,
genUpdateSchemas: false,
genEnums: false,
genInsertTypes: false,
genTables: false,
Expand Down
1 change: 1 addition & 0 deletions src/generator/__tests__/integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ beforeEach(() => {
schema: new SchemaInfo(pool, SCHEMA),
genInsertSchemas: true,
genSelectSchemas: true,
genUpdateSchemas: true,
genTableMetadata: true,
genEnums: true,
genInsertTypes: true,
Expand Down
2 changes: 1 addition & 1 deletion src/generator/builders/InsertSchemaBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { factory, Identifier, Expression, CallExpression } from 'typescript'
import SelectSchemaBuilder from './SelectSchemaBuilder'

export default class InsertSchemaBuilder extends SelectSchemaBuilder {
protected override readonly suffix = '$InsertSchema'
protected override readonly suffix: string = '$InsertSchema'

protected override buildSinglePropertyEntry(
columnInfo: typeof this.columns[0]
Expand Down
49 changes: 49 additions & 0 deletions src/generator/builders/UpdateSchemaBuilder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { factory, VariableStatement, NodeFlags } from 'typescript'
import { z } from 'zod'

import InsertSchemaBuilder from './InsertSchemaBuilder'
import SelectSchemaBuilder from './SelectSchemaBuilder'
import { ExportKeyword } from './NodeBuilder'
import { TableInfoWithColumns, TypeRegistry } from '../database'
import { Transformations } from '../types'

export default class UpdateSchemaBuilder extends SelectSchemaBuilder {
protected override readonly suffix: string = '$UpdateSchema'
insertSchemabuilder: InsertSchemaBuilder

constructor(
options: z.infer<typeof TableInfoWithColumns>,
protected types: TypeRegistry,
transform: Transformations
) {
super(options, types, transform)
this.insertSchemabuilder = new InsertSchemaBuilder(
options,
types,
transform
)
}

public buildNode(): VariableStatement {
const declaration = factory.createVariableDeclaration(
this.typename(),
undefined,
undefined,
factory.createCallExpression(
factory.createPropertyAccessExpression(
this.insertSchemabuilder.typename(),
factory.createIdentifier('partial')
),
undefined,
[]
)
)

const declarationList = factory.createVariableDeclarationList(
[declaration],
NodeFlags.Const
)

return factory.createVariableStatement([ExportKeyword], declarationList)
}
}

0 comments on commit e32b2d6

Please sign in to comment.