kea-typegen 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/package.json +14 -14
  3. package/dist/src/__tests__/e2e/actions.js +4 -4
  4. package/dist/src/__tests__/e2e/actions.js.map +1 -1
  5. package/dist/src/__tests__/e2e/connect.js +6 -6
  6. package/dist/src/__tests__/e2e/connect.js.map +1 -1
  7. package/dist/src/__tests__/e2e/loaders.js +3 -3
  8. package/dist/src/__tests__/e2e/loaders.js.map +1 -1
  9. package/dist/src/__tests__/e2e/reducers.js +4 -4
  10. package/dist/src/__tests__/e2e/reducers.js.map +1 -1
  11. package/dist/src/__tests__/e2e/selectors.js +3 -3
  12. package/dist/src/__tests__/e2e/selectors.js.map +1 -1
  13. package/dist/src/__tests__/utils.js +7 -7
  14. package/dist/src/__tests__/utils.js.map +1 -1
  15. package/dist/src/cli/typegen.js +3 -3
  16. package/dist/src/cli/typegen.js.map +1 -1
  17. package/dist/src/print/print.d.ts +4 -4
  18. package/dist/src/print/print.js +35 -35
  19. package/dist/src/print/print.js.map +1 -1
  20. package/dist/src/print/printActionCreators.d.ts +1 -2
  21. package/dist/src/print/printActionCreators.js +7 -7
  22. package/dist/src/print/printActionCreators.js.map +1 -1
  23. package/dist/src/print/printActionKeys.d.ts +1 -2
  24. package/dist/src/print/printActionKeys.js +4 -4
  25. package/dist/src/print/printActionKeys.js.map +1 -1
  26. package/dist/src/print/printActionTypes.d.ts +1 -2
  27. package/dist/src/print/printActionTypes.js +4 -4
  28. package/dist/src/print/printActionTypes.js.map +1 -1
  29. package/dist/src/print/printActions.d.ts +1 -2
  30. package/dist/src/print/printActions.js +4 -4
  31. package/dist/src/print/printActions.js.map +1 -1
  32. package/dist/src/print/printConstants.d.ts +1 -2
  33. package/dist/src/print/printConstants.js +2 -2
  34. package/dist/src/print/printConstants.js.map +1 -1
  35. package/dist/src/print/printDefaults.d.ts +1 -2
  36. package/dist/src/print/printDefaults.js +3 -3
  37. package/dist/src/print/printDefaults.js.map +1 -1
  38. package/dist/src/print/printEvents.d.ts +1 -2
  39. package/dist/src/print/printEvents.js +3 -3
  40. package/dist/src/print/printEvents.js.map +1 -1
  41. package/dist/src/print/printInternalExtraInput.d.ts +1 -2
  42. package/dist/src/print/printInternalExtraInput.js +8 -8
  43. package/dist/src/print/printInternalExtraInput.js.map +1 -1
  44. package/dist/src/print/printInternalReducerActions.d.ts +1 -2
  45. package/dist/src/print/printInternalReducerActions.js +3 -4
  46. package/dist/src/print/printInternalReducerActions.js.map +1 -1
  47. package/dist/src/print/printInternalSelectorTypes.d.ts +1 -2
  48. package/dist/src/print/printInternalSelectorTypes.js +3 -3
  49. package/dist/src/print/printInternalSelectorTypes.js.map +1 -1
  50. package/dist/src/print/printKey.d.ts +1 -2
  51. package/dist/src/print/printKey.js +2 -2
  52. package/dist/src/print/printKey.js.map +1 -1
  53. package/dist/src/print/printListeners.d.ts +1 -2
  54. package/dist/src/print/printListeners.js +9 -9
  55. package/dist/src/print/printListeners.js.map +1 -1
  56. package/dist/src/print/printProps.d.ts +1 -2
  57. package/dist/src/print/printProps.js +6 -5
  58. package/dist/src/print/printProps.js.map +1 -1
  59. package/dist/src/print/printReducer.d.ts +1 -2
  60. package/dist/src/print/printReducer.js +6 -6
  61. package/dist/src/print/printReducer.js.map +1 -1
  62. package/dist/src/print/printReducerOptions.d.ts +1 -2
  63. package/dist/src/print/printReducerOptions.js +3 -3
  64. package/dist/src/print/printReducerOptions.js.map +1 -1
  65. package/dist/src/print/printReducers.d.ts +1 -2
  66. package/dist/src/print/printReducers.js +7 -7
  67. package/dist/src/print/printReducers.js.map +1 -1
  68. package/dist/src/print/printSelector.d.ts +1 -2
  69. package/dist/src/print/printSelector.js +4 -4
  70. package/dist/src/print/printSelector.js.map +1 -1
  71. package/dist/src/print/printSelectors.d.ts +1 -2
  72. package/dist/src/print/printSelectors.js +6 -6
  73. package/dist/src/print/printSelectors.js.map +1 -1
  74. package/dist/src/print/printSharedListeners.d.ts +1 -2
  75. package/dist/src/print/printSharedListeners.js +11 -11
  76. package/dist/src/print/printSharedListeners.js.map +1 -1
  77. package/dist/src/print/printValues.d.ts +1 -2
  78. package/dist/src/print/printValues.js +3 -3
  79. package/dist/src/print/printValues.js.map +1 -1
  80. package/dist/src/typegen.js +2 -2
  81. package/dist/src/typegen.js.map +1 -1
  82. package/dist/src/utils.js +15 -15
  83. package/dist/src/utils.js.map +1 -1
  84. package/dist/src/visit/__tests__/visit.js +2 -2
  85. package/dist/src/visit/__tests__/visit.js.map +1 -1
  86. package/dist/src/visit/visit.js +13 -13
  87. package/dist/src/visit/visit.js.map +1 -1
  88. package/dist/src/visit/visitActions.d.ts +2 -2
  89. package/dist/src/visit/visitActions.js +13 -11
  90. package/dist/src/visit/visitActions.js.map +1 -1
  91. package/dist/src/visit/visitConnect.js +4 -4
  92. package/dist/src/visit/visitConnect.js.map +1 -1
  93. package/dist/src/visit/visitDefaults.js +1 -1
  94. package/dist/src/visit/visitDefaults.js.map +1 -1
  95. package/dist/src/visit/visitKey.js +2 -2
  96. package/dist/src/visit/visitKey.js.map +1 -1
  97. package/dist/src/visit/visitListeners.js +5 -5
  98. package/dist/src/visit/visitListeners.js.map +1 -1
  99. package/dist/src/visit/visitLoaders.d.ts +2 -2
  100. package/dist/src/visit/visitLoaders.js +27 -27
  101. package/dist/src/visit/visitLoaders.js.map +1 -1
  102. package/dist/src/visit/visitProps.js +1 -1
  103. package/dist/src/visit/visitProps.js.map +1 -1
  104. package/dist/src/visit/visitReducers.js +4 -4
  105. package/dist/src/visit/visitReducers.js.map +1 -1
  106. package/dist/src/visit/visitSelectors.js +8 -8
  107. package/dist/src/visit/visitSelectors.js.map +1 -1
  108. package/dist/src/visit/visitSharedListeners.js +5 -5
  109. package/dist/src/visit/visitSharedListeners.js.map +1 -1
  110. package/dist/src/visit/visitWindowValues.js +1 -1
  111. package/dist/src/visit/visitWindowValues.js.map +1 -1
  112. package/dist/src/write/write.js +16 -15
  113. package/dist/src/write/write.js.map +1 -1
  114. package/dist/tsconfig.tsbuildinfo +1 -1
  115. package/form-plugin/lib/form-plugin/src/typegen.js +16 -15
  116. package/form-plugin/lib/src/types.d.ts +4 -1
  117. package/form-plugin/package.json +1 -1
  118. package/form-plugin/src/typegen.ts +25 -25
  119. package/form-plugin/tsconfig.json +0 -1
  120. package/form-plugin/yarn.lock +10 -10
  121. package/package.json +14 -14
  122. package/samples/autoImportLogic.ts +9 -3
  123. package/samples/autoImportLogicType.ts +1 -1
  124. package/src/__tests__/utils.ts +5 -5
  125. package/src/print/print.ts +33 -19
  126. package/src/print/printActionCreators.ts +12 -15
  127. package/src/print/printActionKeys.ts +5 -6
  128. package/src/print/printActionTypes.ts +6 -7
  129. package/src/print/printActions.ts +6 -13
  130. package/src/print/printConstants.ts +5 -6
  131. package/src/print/printDefaults.ts +5 -6
  132. package/src/print/printEvents.ts +8 -6
  133. package/src/print/printInternalExtraInput.ts +12 -13
  134. package/src/print/printInternalReducerActions.ts +5 -12
  135. package/src/print/printInternalSelectorTypes.ts +7 -8
  136. package/src/print/printKey.ts +2 -2
  137. package/src/print/printListeners.ts +16 -17
  138. package/src/print/printProps.ts +7 -7
  139. package/src/print/printReducer.ts +14 -15
  140. package/src/print/printReducerOptions.ts +4 -5
  141. package/src/print/printReducers.ts +13 -14
  142. package/src/print/printSelector.ts +8 -9
  143. package/src/print/printSelectors.ts +12 -13
  144. package/src/print/printSharedListeners.ts +20 -21
  145. package/src/print/printValues.ts +5 -6
  146. package/src/utils.ts +14 -14
  147. package/src/visit/visit.ts +2 -2
  148. package/src/visit/visitActions.ts +12 -10
  149. package/src/visit/visitListeners.ts +8 -8
  150. package/src/visit/visitLoaders.ts +49 -43
  151. package/src/visit/visitReducers.ts +1 -1
  152. package/src/visit/visitSelectors.ts +3 -3
  153. package/src/visit/visitSharedListeners.ts +8 -10
  154. package/src/write/write.ts +29 -24
@@ -1,39 +1,38 @@
1
- import * as ts from 'typescript'
1
+ import { factory, SyntaxKind } from 'typescript'
2
2
  import { ParsedLogic } from '../types'
3
3
  import { cleanDuplicateAnyNodes } from '../utils'
4
4
 
5
5
  export function printSelectors(parsedLogic: ParsedLogic) {
6
- return ts.createTypeLiteralNode(
6
+ return factory.createTypeLiteralNode(
7
7
  cleanDuplicateAnyNodes(parsedLogic.reducers.concat(parsedLogic.selectors)).map((reducer) => {
8
- return ts.createPropertySignature(
8
+ return factory.createPropertySignature(
9
9
  undefined,
10
- ts.createIdentifier(reducer.name),
10
+ factory.createIdentifier(reducer.name),
11
11
  undefined,
12
- ts.createFunctionTypeNode(
12
+ factory.createFunctionTypeNode(
13
13
  undefined,
14
14
  [
15
- ts.createParameter(
15
+ factory.createParameterDeclaration(
16
16
  undefined,
17
17
  undefined,
18
18
  undefined,
19
- ts.createIdentifier('state'),
19
+ factory.createIdentifier('state'),
20
20
  undefined,
21
- ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
21
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
22
22
  undefined,
23
23
  ),
24
- ts.createParameter(
24
+ factory.createParameterDeclaration(
25
25
  undefined,
26
26
  undefined,
27
27
  undefined,
28
- ts.createIdentifier('props'),
29
- ts.createToken(ts.SyntaxKind.QuestionToken),
30
- ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
28
+ factory.createIdentifier('props'),
29
+ factory.createToken(SyntaxKind.QuestionToken),
30
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
31
31
  undefined,
32
32
  ),
33
33
  ],
34
34
  reducer.typeNode,
35
35
  ),
36
- undefined,
37
36
  )
38
37
  }),
39
38
  )
@@ -1,61 +1,60 @@
1
- import * as ts from 'typescript'
1
+ import { factory, SyntaxKind } from 'typescript'
2
2
  import { ParsedLogic } from '../types'
3
3
 
4
4
  export function printSharedListeners(parsedLogic: ParsedLogic) {
5
- return ts.createTypeLiteralNode(
5
+ return factory.createTypeLiteralNode(
6
6
  parsedLogic.sharedListeners.map(({ name, payload, action }) =>
7
- ts.createPropertySignature(
7
+ factory.createPropertySignature(
8
8
  undefined,
9
- ts.createStringLiteral(name),
9
+ factory.createStringLiteral(name),
10
10
  undefined,
11
- ts.createFunctionTypeNode(
11
+ factory.createFunctionTypeNode(
12
12
  undefined,
13
13
  [
14
- ts.createParameter(
14
+ factory.createParameterDeclaration(
15
15
  undefined,
16
16
  undefined,
17
17
  undefined,
18
- ts.createIdentifier('payload'),
18
+ factory.createIdentifier('payload'),
19
19
  undefined,
20
- payload || ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
20
+ payload || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
21
21
  undefined,
22
22
  ),
23
- ts.createParameter(
23
+ factory.createParameterDeclaration(
24
24
  undefined,
25
25
  undefined,
26
26
  undefined,
27
- ts.createIdentifier('breakpoint'),
27
+ factory.createIdentifier('breakpoint'),
28
28
  undefined,
29
- ts.createTypeReferenceNode(ts.createIdentifier('BreakPointFunction'), undefined),
29
+ factory.createTypeReferenceNode(factory.createIdentifier('BreakPointFunction'), undefined),
30
30
  undefined,
31
31
  ),
32
- ts.createParameter(
32
+ factory.createParameterDeclaration(
33
33
  undefined,
34
34
  undefined,
35
35
  undefined,
36
- ts.createIdentifier('action'),
36
+ factory.createIdentifier('action'),
37
37
  undefined,
38
38
  action,
39
39
  undefined,
40
40
  ),
41
- ts.createParameter(
41
+ factory.createParameterDeclaration(
42
42
  undefined,
43
43
  undefined,
44
44
  undefined,
45
- ts.createIdentifier('previousState'),
45
+ factory.createIdentifier('previousState'),
46
46
  undefined,
47
- ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
47
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
48
48
  undefined,
49
49
  ),
50
50
  ],
51
- ts.createUnionTypeNode([
52
- { ...ts.createToken(ts.SyntaxKind.VoidKeyword), _typeNodeBrand: true },
53
- ts.createTypeReferenceNode(ts.createIdentifier('Promise'), [
54
- { ...ts.createToken(ts.SyntaxKind.VoidKeyword), _typeNodeBrand: true },
51
+ factory.createUnionTypeNode([
52
+ { ...factory.createToken(SyntaxKind.VoidKeyword), _typeNodeBrand: true },
53
+ factory.createTypeReferenceNode(factory.createIdentifier('Promise'), [
54
+ { ...factory.createToken(SyntaxKind.VoidKeyword), _typeNodeBrand: true },
55
55
  ]),
56
56
  ]),
57
57
  ),
58
- undefined,
59
58
  ),
60
59
  ),
61
60
  )
@@ -1,16 +1,15 @@
1
- import * as ts from 'typescript'
1
+ import { factory } from 'typescript'
2
2
  import { ParsedLogic } from '../types'
3
- import {cleanDuplicateAnyNodes} from "../utils";
3
+ import { cleanDuplicateAnyNodes } from '../utils'
4
4
 
5
5
  export function printValues(parsedLogic: ParsedLogic) {
6
- return ts.createTypeLiteralNode(
6
+ return factory.createTypeLiteralNode(
7
7
  cleanDuplicateAnyNodes(parsedLogic.reducers.concat(parsedLogic.selectors)).map((reducer) => {
8
- return ts.createPropertySignature(
8
+ return factory.createPropertySignature(
9
9
  undefined,
10
- ts.createIdentifier(reducer.name),
10
+ factory.createIdentifier(reducer.name),
11
11
  undefined,
12
12
  reducer.typeNode,
13
- undefined,
14
13
  )
15
14
  }),
16
15
  )
package/src/utils.ts CHANGED
@@ -4,7 +4,7 @@ import { cloneNode } from '@wessberg/ts-clone-node'
4
4
  import { visitProgram } from './visit/visit'
5
5
  import { parsedLogicToTypeString } from './print/print'
6
6
  import { AppOptions, NameType, ParsedLogic } from './types'
7
- import { NodeBuilderFlags } from 'typescript'
7
+ import { factory, NodeBuilderFlags, SyntaxKind } from 'typescript'
8
8
 
9
9
  export function logicSourceToLogicType(logicSource: string, appOptions?: AppOptions) {
10
10
  const program = programFromSource(logicSource)
@@ -54,19 +54,19 @@ export function getTypeNodeForNode(node: ts.Node, checker: ts.TypeChecker): ts.T
54
54
  if (ts.isParenthesizedTypeNode(typeNode)) {
55
55
  typeNode = typeNode.type
56
56
  }
57
- } else if (node?.kind === ts.SyntaxKind.TrueKeyword || node?.kind === ts.SyntaxKind.FalseKeyword) {
58
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword)
57
+ } else if (node?.kind === SyntaxKind.TrueKeyword || node?.kind === SyntaxKind.FalseKeyword) {
58
+ typeNode = factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword)
59
59
  } else if (ts.isStringLiteralLike(node)) {
60
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
60
+ typeNode = factory.createKeywordTypeNode(SyntaxKind.StringKeyword)
61
61
  } else if (ts.isNumericLiteral(node)) {
62
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword)
62
+ typeNode = factory.createKeywordTypeNode(SyntaxKind.NumberKeyword)
63
63
  } else if (ts.isArrayLiteralExpression(node) && node.elements.length === 0) {
64
- typeNode = ts.createArrayTypeNode(ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))
64
+ typeNode = factory.createArrayTypeNode(factory.createKeywordTypeNode(SyntaxKind.AnyKeyword))
65
65
  } else {
66
66
  typeNode = checker.typeToTypeNode(checker.getTypeAtLocation(node), undefined, undefined)
67
67
  }
68
68
  } else {
69
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
69
+ typeNode = factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)
70
70
  }
71
71
  return typeNode
72
72
  }
@@ -82,13 +82,13 @@ export function getAndGatherTypeNodeForDefaultValue(
82
82
  }
83
83
 
84
84
  export function getParameterDeclaration(param: ts.ParameterDeclaration) {
85
- return ts.createParameter(
85
+ return factory.createParameterDeclaration(
86
86
  undefined,
87
87
  undefined,
88
88
  undefined,
89
- ts.createIdentifier(param.name.getText()),
90
- param.initializer || param.questionToken ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined,
91
- cloneNode(param.type || ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)),
89
+ factory.createIdentifier(param.name.getText()),
90
+ param.initializer || param.questionToken ? factory.createToken(SyntaxKind.QuestionToken) : undefined,
91
+ cloneNode(param.type || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)),
92
92
  undefined,
93
93
  )
94
94
  }
@@ -230,7 +230,7 @@ export function gatherImports(input: ts.Node, checker: ts.TypeChecker, parsedLog
230
230
  let node = requestedNode
231
231
  if (ts.isTypeReferenceNode(node)) {
232
232
  let typeRootName: string | undefined
233
- if (node.typeName?.kind === ts.SyntaxKind.FirstNode) {
233
+ if (node.typeName?.kind === SyntaxKind.FirstNode) {
234
234
  try {
235
235
  typeRootName = node.typeName.getFirstToken().getText()
236
236
  } catch (e) {
@@ -334,8 +334,8 @@ export function isAnyUnknown(node?: ts.Node): boolean {
334
334
  const unPromised = unPromisify(node)
335
335
  return (
336
336
  !unPromised ||
337
- unPromised.kind === ts.SyntaxKind.AnyKeyword ||
338
- unPromised.kind === ts.SyntaxKind.UnknownKeyword ||
337
+ unPromised.kind === SyntaxKind.AnyKeyword ||
338
+ unPromised.kind === SyntaxKind.UnknownKeyword ||
339
339
  (ts.isTypeLiteralNode(unPromised) && unPromised.members.length === 0)
340
340
  )
341
341
  }
@@ -179,9 +179,9 @@ export function visitKeaCalls(
179
179
  // only if symbol resolves we mark the logic type as imported
180
180
  const symbol = checker.getSymbolAtLocation(keaTypeArgument.typeName)
181
181
  if (symbol) {
182
- const declaration = symbol.getDeclarations()[0]
182
+ const declaration = symbol.getDeclarations()?.[0]
183
183
 
184
- if (ts.isImportSpecifier(declaration)) {
184
+ if (declaration && ts.isImportSpecifier(declaration)) {
185
185
  const filename = getFilenameForImportSpecifier(declaration, checker)
186
186
  logicTypeImported = filename === typeFileName
187
187
  }
@@ -1,10 +1,10 @@
1
1
  import { ParsedLogic } from '../types'
2
- import * as ts from 'typescript'
2
+ import { factory, isFunctionLike, isPropertyAssignment, PropertyAssignment, SyntaxKind, Type } from 'typescript'
3
3
  import { NodeBuilderFlags } from 'typescript'
4
4
  import { cloneNode } from '@wessberg/ts-clone-node'
5
5
  import { gatherImports } from '../utils'
6
6
 
7
- export function visitActions(type: ts.Type, inputProperty: ts.PropertyAssignment, parsedLogic: ParsedLogic) {
7
+ export function visitActions(type: Type, inputProperty: PropertyAssignment, parsedLogic: ParsedLogic) {
8
8
  const { checker } = parsedLogic
9
9
  const properties = checker.getPropertiesOfType(type)
10
10
 
@@ -15,24 +15,26 @@ export function visitActions(type: ts.Type, inputProperty: ts.PropertyAssignment
15
15
  let returnTypeNode
16
16
  let parameters
17
17
 
18
- if (!ts.isPropertyAssignment(property.valueDeclaration)) {
18
+ if (!isPropertyAssignment(property.valueDeclaration)) {
19
19
  continue
20
20
  }
21
21
  const { initializer } = property.valueDeclaration
22
22
 
23
- if (ts.isFunctionLike(initializer)) {
23
+ if (isFunctionLike(initializer)) {
24
24
  // action is a function action: () => ({ ... })
25
25
  parameters = initializer.parameters.map((param) => {
26
26
  if (param.type) {
27
27
  gatherImports(param.type, checker, parsedLogic)
28
28
  }
29
- return ts.createParameter(
29
+ return factory.createParameterDeclaration(
30
30
  undefined,
31
31
  undefined,
32
32
  undefined,
33
- ts.createIdentifier(param.name.getText()),
34
- param.initializer || param.questionToken ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined,
35
- param.type ? cloneNode(param.type) : ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
33
+ factory.createIdentifier(param.name.getText()),
34
+ param.initializer || param.questionToken
35
+ ? factory.createToken(SyntaxKind.QuestionToken)
36
+ : undefined,
37
+ param.type ? cloneNode(param.type) : factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
36
38
  undefined,
37
39
  )
38
40
  })
@@ -58,8 +60,8 @@ export function visitActions(type: ts.Type, inputProperty: ts.PropertyAssignment
58
60
  // action is a value (action: true)
59
61
  const typeNode = checker.typeToTypeNode(type, undefined, undefined)
60
62
  gatherImports(typeNode, checker, parsedLogic)
61
- returnTypeNode = ts.createTypeLiteralNode([
62
- ts.createPropertySignature(undefined, ts.createIdentifier('value'), undefined, typeNode, undefined),
63
+ returnTypeNode = factory.createTypeLiteralNode([
64
+ factory.createPropertySignature(undefined, factory.createIdentifier('value'), undefined, typeNode),
63
65
  ])
64
66
  }
65
67
  parsedLogic.actions.push({ name, parameters, returnTypeNode })
@@ -47,20 +47,20 @@ export function visitListeners(type: ts.Type, inputProperty: ts.PropertyAssignme
47
47
  parsedLogic.listeners.push({
48
48
  name: action.name,
49
49
  payload: action.returnTypeNode,
50
- action: ts.createTypeLiteralNode([
51
- ts.createPropertySignature(
50
+ action: ts.factory.createTypeLiteralNode([
51
+ ts.factory.createPropertySignature(
52
52
  undefined,
53
- ts.createIdentifier('type'),
54
- undefined,
55
- ts.createLiteralTypeNode(ts.createStringLiteral(getActionType(action.name))),
53
+ ts.factory.createIdentifier('type'),
56
54
  undefined,
55
+ ts.factory.createLiteralTypeNode(
56
+ ts.factory.createStringLiteral(getActionType(action.name)),
57
+ ),
57
58
  ),
58
- ts.createPropertySignature(
59
+ ts.factory.createPropertySignature(
59
60
  undefined,
60
- ts.createIdentifier('payload'),
61
+ ts.factory.createIdentifier('payload'),
61
62
  undefined,
62
63
  action.returnTypeNode,
63
- undefined,
64
64
  ),
65
65
  ]),
66
66
  })
@@ -1,5 +1,15 @@
1
1
  import { ParsedLogic } from '../types'
2
- import * as ts from 'typescript'
2
+ import {
3
+ factory,
4
+ isArrayLiteralExpression,
5
+ isFunctionLike,
6
+ isObjectLiteralExpression,
7
+ isTypeReferenceNode,
8
+ PropertyAssignment,
9
+ SyntaxKind,
10
+ Type,
11
+ TypeNode,
12
+ } from 'typescript'
3
13
  import {
4
14
  gatherImports,
5
15
  getParameterDeclaration,
@@ -9,22 +19,22 @@ import {
9
19
  } from '../utils'
10
20
  import { NodeBuilderFlags } from 'typescript'
11
21
 
12
- export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment, parsedLogic: ParsedLogic) {
22
+ export function visitLoaders(type: Type, inputProperty: PropertyAssignment, parsedLogic: ParsedLogic) {
13
23
  const { checker } = parsedLogic
14
24
 
15
25
  for (const property of type.getProperties()) {
16
26
  const loaderName = property.getName()
17
- const value = (property.valueDeclaration as ts.PropertyAssignment).initializer
27
+ const value = (property.valueDeclaration as PropertyAssignment).initializer
18
28
 
19
29
  let defaultValue
20
30
  let objectLiteral
21
- if (ts.isArrayLiteralExpression(value)) {
31
+ if (isArrayLiteralExpression(value)) {
22
32
  defaultValue = value.elements[0]
23
33
  objectLiteral = value.elements[1]
24
- } else if (ts.isObjectLiteralExpression(value)) {
34
+ } else if (isObjectLiteralExpression(value)) {
25
35
  defaultValue = (value.properties.find(
26
36
  (property) => checker.getSymbolAtLocation(property.name)?.getName() === '__default',
27
- ) as ts.PropertyAssignment)?.initializer
37
+ ) as PropertyAssignment)?.initializer
28
38
  objectLiteral = value
29
39
  }
30
40
 
@@ -35,18 +45,18 @@ export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment
35
45
  parsedLogic.reducers.push({ name: loaderName, typeNode: defaultValueTypeNode })
36
46
  parsedLogic.reducers.push({
37
47
  name: `${loaderName}Loading`,
38
- typeNode: ts.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),
48
+ typeNode: factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword),
39
49
  })
40
50
 
41
51
  if (objectLiteral) {
42
- ;(objectLiteral.properties || []).forEach((property: ts.PropertyAssignment) => {
52
+ ;(objectLiteral.properties || []).forEach((property: PropertyAssignment) => {
43
53
  const loaderActionName = checker.getSymbolAtLocation(property.name)?.getName()
44
54
  if (loaderActionName === '__default') {
45
55
  return
46
56
  }
47
57
 
48
58
  const func = property.initializer
49
- if (!ts.isFunctionLike(func)) {
59
+ if (!isFunctionLike(func)) {
50
60
  return
51
61
  }
52
62
 
@@ -54,14 +64,14 @@ export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment
54
64
  const parameters = param ? [getParameterDeclaration(param)] : []
55
65
 
56
66
  if (!parsedLogic.actions.find(({ name }) => name === `${loaderActionName}`)) {
57
- const returnTypeNode = param?.type || ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
67
+ const returnTypeNode = param?.type || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)
58
68
  gatherImports(param, checker, parsedLogic)
59
69
 
60
70
  parsedLogic.actions.push({ name: `${loaderActionName}`, parameters, returnTypeNode })
61
71
  }
62
72
 
63
73
  if (!parsedLogic.actions.find(({ name }) => name === `${loaderActionName}Success`)) {
64
- let returnTypeNode: ts.TypeNode
74
+ let returnTypeNode: TypeNode
65
75
  if (func) {
66
76
  const funcType = checker.getTypeAtLocation(func)
67
77
  const signature = funcType?.getCallSignatures()[0]
@@ -82,11 +92,11 @@ export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment
82
92
  }
83
93
 
84
94
  if (!returnTypeNode) {
85
- returnTypeNode = defaultValueTypeNode || ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
95
+ returnTypeNode = defaultValueTypeNode || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)
86
96
  }
87
97
 
88
98
  if (
89
- ts.isTypeReferenceNode(returnTypeNode) &&
99
+ isTypeReferenceNode(returnTypeNode) &&
90
100
  (returnTypeNode.typeName as any)?.escapedText === 'Promise'
91
101
  ) {
92
102
  returnTypeNode = returnTypeNode.typeArguments?.[0]
@@ -95,39 +105,37 @@ export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment
95
105
  gatherImports(returnTypeNode, checker, parsedLogic)
96
106
 
97
107
  const successParameters = [
98
- ts.createParameter(
108
+ factory.createParameterDeclaration(
99
109
  undefined,
100
110
  undefined,
101
111
  undefined,
102
- ts.createIdentifier(loaderName),
112
+ factory.createIdentifier(loaderName),
103
113
  undefined,
104
114
  returnTypeNode,
105
115
  undefined,
106
116
  ),
107
- ts.createParameter(
117
+ factory.createParameterDeclaration(
108
118
  undefined,
109
119
  undefined,
110
120
  undefined,
111
- ts.createIdentifier('payload'),
112
- ts.createToken(ts.SyntaxKind.QuestionToken),
121
+ factory.createIdentifier('payload'),
122
+ factory.createToken(SyntaxKind.QuestionToken),
113
123
  parsedLogic.actions.find((a) => a.name === loaderActionName)?.returnTypeNode,
114
124
  undefined,
115
125
  ),
116
126
  ]
117
- const successReturnTypeNode = ts.createTypeLiteralNode([
118
- ts.createPropertySignature(
127
+ const successReturnTypeNode = factory.createTypeLiteralNode([
128
+ factory.createPropertySignature(
119
129
  undefined,
120
- ts.createIdentifier(loaderName),
130
+ factory.createIdentifier(loaderName),
121
131
  undefined,
122
132
  returnTypeNode,
123
- undefined,
124
133
  ),
125
- ts.createPropertySignature(
134
+ factory.createPropertySignature(
126
135
  undefined,
127
- ts.createIdentifier('payload'),
128
- ts.createToken(ts.SyntaxKind.QuestionToken),
136
+ factory.createIdentifier('payload'),
137
+ factory.createToken(SyntaxKind.QuestionToken),
129
138
  parsedLogic.actions.find((a) => a.name === loaderActionName)?.returnTypeNode,
130
- undefined,
131
139
  ),
132
140
  ])
133
141
  parsedLogic.actions.push({
@@ -139,39 +147,37 @@ export function visitLoaders(type: ts.Type, inputProperty: ts.PropertyAssignment
139
147
 
140
148
  if (!parsedLogic.actions.find(({ name }) => name === `${loaderActionName}Failure`)) {
141
149
  const failureParameters = [
142
- ts.createParameter(
150
+ factory.createParameterDeclaration(
143
151
  undefined,
144
152
  undefined,
145
153
  undefined,
146
- ts.createIdentifier('error'),
154
+ factory.createIdentifier('error'),
147
155
  undefined,
148
- ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
156
+ factory.createKeywordTypeNode(SyntaxKind.StringKeyword),
149
157
  undefined,
150
158
  ),
151
- ts.createParameter(
159
+ factory.createParameterDeclaration(
152
160
  undefined,
153
161
  undefined,
154
162
  undefined,
155
- ts.createIdentifier('errorObject'),
156
- ts.createToken(ts.SyntaxKind.QuestionToken),
157
- ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
163
+ factory.createIdentifier('errorObject'),
164
+ factory.createToken(SyntaxKind.QuestionToken),
165
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
158
166
  undefined,
159
167
  ),
160
168
  ]
161
- const failureReturnTypeNode = ts.createTypeLiteralNode([
162
- ts.createPropertySignature(
169
+ const failureReturnTypeNode = factory.createTypeLiteralNode([
170
+ factory.createPropertySignature(
163
171
  undefined,
164
- ts.createIdentifier('error'),
165
- undefined,
166
- ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
172
+ factory.createIdentifier('error'),
167
173
  undefined,
174
+ factory.createKeywordTypeNode(SyntaxKind.StringKeyword),
168
175
  ),
169
- ts.createPropertySignature(
170
- undefined,
171
- ts.createIdentifier('errorObject'),
172
- ts.createToken(ts.SyntaxKind.QuestionToken),
173
- ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
176
+ factory.createPropertySignature(
174
177
  undefined,
178
+ factory.createIdentifier('errorObject'),
179
+ factory.createToken(SyntaxKind.QuestionToken),
180
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
175
181
  ),
176
182
  ])
177
183
 
@@ -34,7 +34,7 @@ export function visitReducers(type: ts.Type, inputProperty: ts.PropertyAssignmen
34
34
  }
35
35
  }
36
36
  } else if (ts.isObjectLiteralExpression(value)) {
37
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
37
+ typeNode = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
38
38
  }
39
39
 
40
40
  parsedLogic.reducers.push({ name, typeNode, reducerOptions })
@@ -34,7 +34,7 @@ export function visitSelectors(type: ts.Type, inputProperty: ts.PropertyAssignme
34
34
 
35
35
  if (selectorInputTypeNode && ts.isTupleTypeNode(selectorInputTypeNode)) {
36
36
  let takenNames: Record<string, number> = {}
37
- functionTypes = (selectorInputTypeNode.elements || ts.createNodeArray([]))
37
+ functionTypes = (selectorInputTypeNode.elements || ts.factory.createNodeArray([]))
38
38
  .filter((e) => ts.isTypeNode(e))
39
39
  .map((selectorTypeNode, index) => {
40
40
  let name = functionNames[index] || 'arg'
@@ -49,7 +49,7 @@ export function visitSelectors(type: ts.Type, inputProperty: ts.PropertyAssignme
49
49
  name,
50
50
  type: ts.isFunctionTypeNode(selectorTypeNode)
51
51
  ? cloneNode(selectorTypeNode.type)
52
- : ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
52
+ : ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
53
53
  }
54
54
  })
55
55
  }
@@ -67,7 +67,7 @@ export function visitSelectors(type: ts.Type, inputProperty: ts.PropertyAssignme
67
67
  typeNode = checker.typeToTypeNode(type, undefined, NodeBuilderFlags.NoTruncation)
68
68
  gatherImports(typeNode, checker, parsedLogic)
69
69
  } else {
70
- typeNode = ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
70
+ typeNode = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
71
71
  }
72
72
 
73
73
  parsedLogic.selectors.push({
@@ -23,21 +23,19 @@ export function visitSharedListeners(type: ts.Type, inputProperty: ts.PropertyAs
23
23
  parsedLogic.sharedListeners.push({
24
24
  name,
25
25
  payload: typeNode,
26
- action: ts.createTypeLiteralNode([
27
- ts.createPropertySignature(
26
+ action: ts.factory.createTypeLiteralNode([
27
+ ts.factory.createPropertySignature(
28
28
  undefined,
29
- ts.createIdentifier('type'),
30
- undefined,
31
- ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
29
+ ts.factory.createIdentifier('type'),
32
30
  undefined,
31
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
33
32
  ),
34
- ts.createPropertySignature(
35
- undefined,
36
- ts.createIdentifier('payload'),
33
+ ts.factory.createPropertySignature(
37
34
  undefined,
38
- typeNode || ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
39
- // ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
35
+ ts.factory.createIdentifier('payload'),
40
36
  undefined,
37
+ typeNode || ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
38
+ // ts.factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
41
39
  ),
42
40
  ]),
43
41
  })