Skip to content

Commit

Permalink
refactor: use a typewriter factory
Browse files Browse the repository at this point in the history
  • Loading branch information
johngeorgewright committed Jul 20, 2021
1 parent 0eec87b commit 4d58972
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 78 deletions.
49 changes: 49 additions & 0 deletions src/typeWriter/factory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Type } from 'ts-morph'
import arrayTypeGenerator from './array'
import enumTypeGenerator from './enum'
import intersecionTypeGenerator from './intersection'
import literalTypeGenerator from './literal'
import objectTypeGenerator from './object'
import simpleTypeGenerator from './simple'
import unionTypeGenerator from './union'

export default function factory(type: Type) {
switch (true) {
case type.isString():
return simpleTypeGenerator('String')

case type.isNumber():
return simpleTypeGenerator('Number')

case type.isBoolean():
return simpleTypeGenerator('Boolean')

case type.isArray():
return arrayTypeGenerator(type)

case type.isEnum():
return enumTypeGenerator(type)

case type.isIntersection():
return intersecionTypeGenerator(type)

case type.isUnion():
return unionTypeGenerator(type)

case type.isLiteral():
return literalTypeGenerator(type)

case type.isAny():
return simpleTypeGenerator('Unknown')

case type.isUndefined():
return simpleTypeGenerator('Undefined')

case type.isInterface():
case type.isObject():
return objectTypeGenerator(type)

default:
throw new Error('!!! TYPE ' + type.getText() + ' NOT PARSED !!!')
}
}
4 changes: 2 additions & 2 deletions src/typeWriter/generateOrReuseType.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { tryCatch } from '@johngw/error'
import { Type } from 'ts-morph'
import typeGenerator from './typeGenerator'
import factory from './factory'
import RuntypeGenerator from './RuntypeGenerator'
import { Declare } from './symbols'

Expand All @@ -14,5 +14,5 @@ export default function* generateOrReuseType(type: Type): RuntypeGenerator {
return
}

yield* typeGenerator(type)
yield* factory(type)
}
14 changes: 12 additions & 2 deletions src/typeWriter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
VariableDeclarationKind,
} from 'ts-morph'
import { Declare, Import, ImportFromSource, Write } from './symbols'
import typeGenerator from './typeGenerator'
import factory from './factory'

export default function writeRuntype(
project: Project,
Expand All @@ -21,9 +21,15 @@ export default function writeRuntype(
) {
const typeDeclaration = getTypeDeclaration(sourceFile, sourceType)
const recursive = isRecursive(typeDeclaration)
const generator = typeGenerator(typeDeclaration.getType(), recursive)
const generator = factory(typeDeclaration.getType())

let writer = project.createWriter()

if (recursive) {
runtypeImports.add('Lazy')
writer = writer.write('Lazy(() => ')
}

let item = generator.next()

while (!item.done) {
Expand Down Expand Up @@ -63,6 +69,10 @@ export default function writeRuntype(
item = generator.next(next)
}

if (recursive) {
writer = writer.write(')')
}

targetFile.addVariableStatement({
isExported: true,
declarationKind: VariableDeclarationKind.Const,
Expand Down
74 changes: 0 additions & 74 deletions src/typeWriter/typeGenerator.ts

This file was deleted.

0 comments on commit 4d58972

Please sign in to comment.