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.
- package/CHANGELOG.md +6 -0
- package/dist/package.json +14 -14
- package/dist/src/__tests__/e2e/actions.js +4 -4
- package/dist/src/__tests__/e2e/actions.js.map +1 -1
- package/dist/src/__tests__/e2e/connect.js +6 -6
- package/dist/src/__tests__/e2e/connect.js.map +1 -1
- package/dist/src/__tests__/e2e/loaders.js +3 -3
- package/dist/src/__tests__/e2e/loaders.js.map +1 -1
- package/dist/src/__tests__/e2e/reducers.js +4 -4
- package/dist/src/__tests__/e2e/reducers.js.map +1 -1
- package/dist/src/__tests__/e2e/selectors.js +3 -3
- package/dist/src/__tests__/e2e/selectors.js.map +1 -1
- package/dist/src/__tests__/utils.js +7 -7
- package/dist/src/__tests__/utils.js.map +1 -1
- package/dist/src/cli/typegen.js +3 -3
- package/dist/src/cli/typegen.js.map +1 -1
- package/dist/src/print/print.d.ts +4 -4
- package/dist/src/print/print.js +35 -35
- package/dist/src/print/print.js.map +1 -1
- package/dist/src/print/printActionCreators.d.ts +1 -2
- package/dist/src/print/printActionCreators.js +7 -7
- package/dist/src/print/printActionCreators.js.map +1 -1
- package/dist/src/print/printActionKeys.d.ts +1 -2
- package/dist/src/print/printActionKeys.js +4 -4
- package/dist/src/print/printActionKeys.js.map +1 -1
- package/dist/src/print/printActionTypes.d.ts +1 -2
- package/dist/src/print/printActionTypes.js +4 -4
- package/dist/src/print/printActionTypes.js.map +1 -1
- package/dist/src/print/printActions.d.ts +1 -2
- package/dist/src/print/printActions.js +4 -4
- package/dist/src/print/printActions.js.map +1 -1
- package/dist/src/print/printConstants.d.ts +1 -2
- package/dist/src/print/printConstants.js +2 -2
- package/dist/src/print/printConstants.js.map +1 -1
- package/dist/src/print/printDefaults.d.ts +1 -2
- package/dist/src/print/printDefaults.js +3 -3
- package/dist/src/print/printDefaults.js.map +1 -1
- package/dist/src/print/printEvents.d.ts +1 -2
- package/dist/src/print/printEvents.js +3 -3
- package/dist/src/print/printEvents.js.map +1 -1
- package/dist/src/print/printInternalExtraInput.d.ts +1 -2
- package/dist/src/print/printInternalExtraInput.js +8 -8
- package/dist/src/print/printInternalExtraInput.js.map +1 -1
- package/dist/src/print/printInternalReducerActions.d.ts +1 -2
- package/dist/src/print/printInternalReducerActions.js +3 -4
- package/dist/src/print/printInternalReducerActions.js.map +1 -1
- package/dist/src/print/printInternalSelectorTypes.d.ts +1 -2
- package/dist/src/print/printInternalSelectorTypes.js +3 -3
- package/dist/src/print/printInternalSelectorTypes.js.map +1 -1
- package/dist/src/print/printKey.d.ts +1 -2
- package/dist/src/print/printKey.js +2 -2
- package/dist/src/print/printKey.js.map +1 -1
- package/dist/src/print/printListeners.d.ts +1 -2
- package/dist/src/print/printListeners.js +9 -9
- package/dist/src/print/printListeners.js.map +1 -1
- package/dist/src/print/printProps.d.ts +1 -2
- package/dist/src/print/printProps.js +6 -5
- package/dist/src/print/printProps.js.map +1 -1
- package/dist/src/print/printReducer.d.ts +1 -2
- package/dist/src/print/printReducer.js +6 -6
- package/dist/src/print/printReducer.js.map +1 -1
- package/dist/src/print/printReducerOptions.d.ts +1 -2
- package/dist/src/print/printReducerOptions.js +3 -3
- package/dist/src/print/printReducerOptions.js.map +1 -1
- package/dist/src/print/printReducers.d.ts +1 -2
- package/dist/src/print/printReducers.js +7 -7
- package/dist/src/print/printReducers.js.map +1 -1
- package/dist/src/print/printSelector.d.ts +1 -2
- package/dist/src/print/printSelector.js +4 -4
- package/dist/src/print/printSelector.js.map +1 -1
- package/dist/src/print/printSelectors.d.ts +1 -2
- package/dist/src/print/printSelectors.js +6 -6
- package/dist/src/print/printSelectors.js.map +1 -1
- package/dist/src/print/printSharedListeners.d.ts +1 -2
- package/dist/src/print/printSharedListeners.js +11 -11
- package/dist/src/print/printSharedListeners.js.map +1 -1
- package/dist/src/print/printValues.d.ts +1 -2
- package/dist/src/print/printValues.js +3 -3
- package/dist/src/print/printValues.js.map +1 -1
- package/dist/src/typegen.js +2 -2
- package/dist/src/typegen.js.map +1 -1
- package/dist/src/utils.js +15 -15
- package/dist/src/utils.js.map +1 -1
- package/dist/src/visit/__tests__/visit.js +2 -2
- package/dist/src/visit/__tests__/visit.js.map +1 -1
- package/dist/src/visit/visit.js +13 -13
- package/dist/src/visit/visit.js.map +1 -1
- package/dist/src/visit/visitActions.d.ts +2 -2
- package/dist/src/visit/visitActions.js +13 -11
- package/dist/src/visit/visitActions.js.map +1 -1
- package/dist/src/visit/visitConnect.js +4 -4
- package/dist/src/visit/visitConnect.js.map +1 -1
- package/dist/src/visit/visitDefaults.js +1 -1
- package/dist/src/visit/visitDefaults.js.map +1 -1
- package/dist/src/visit/visitKey.js +2 -2
- package/dist/src/visit/visitKey.js.map +1 -1
- package/dist/src/visit/visitListeners.js +5 -5
- package/dist/src/visit/visitListeners.js.map +1 -1
- package/dist/src/visit/visitLoaders.d.ts +2 -2
- package/dist/src/visit/visitLoaders.js +27 -27
- package/dist/src/visit/visitLoaders.js.map +1 -1
- package/dist/src/visit/visitProps.js +1 -1
- package/dist/src/visit/visitProps.js.map +1 -1
- package/dist/src/visit/visitReducers.js +4 -4
- package/dist/src/visit/visitReducers.js.map +1 -1
- package/dist/src/visit/visitSelectors.js +8 -8
- package/dist/src/visit/visitSelectors.js.map +1 -1
- package/dist/src/visit/visitSharedListeners.js +5 -5
- package/dist/src/visit/visitSharedListeners.js.map +1 -1
- package/dist/src/visit/visitWindowValues.js +1 -1
- package/dist/src/visit/visitWindowValues.js.map +1 -1
- package/dist/src/write/write.js +16 -15
- package/dist/src/write/write.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/form-plugin/lib/form-plugin/src/typegen.js +16 -15
- package/form-plugin/lib/src/types.d.ts +4 -1
- package/form-plugin/package.json +1 -1
- package/form-plugin/src/typegen.ts +25 -25
- package/form-plugin/tsconfig.json +0 -1
- package/form-plugin/yarn.lock +10 -10
- package/package.json +14 -14
- package/samples/autoImportLogic.ts +9 -3
- package/samples/autoImportLogicType.ts +1 -1
- package/src/__tests__/utils.ts +5 -5
- package/src/print/print.ts +33 -19
- package/src/print/printActionCreators.ts +12 -15
- package/src/print/printActionKeys.ts +5 -6
- package/src/print/printActionTypes.ts +6 -7
- package/src/print/printActions.ts +6 -13
- package/src/print/printConstants.ts +5 -6
- package/src/print/printDefaults.ts +5 -6
- package/src/print/printEvents.ts +8 -6
- package/src/print/printInternalExtraInput.ts +12 -13
- package/src/print/printInternalReducerActions.ts +5 -12
- package/src/print/printInternalSelectorTypes.ts +7 -8
- package/src/print/printKey.ts +2 -2
- package/src/print/printListeners.ts +16 -17
- package/src/print/printProps.ts +7 -7
- package/src/print/printReducer.ts +14 -15
- package/src/print/printReducerOptions.ts +4 -5
- package/src/print/printReducers.ts +13 -14
- package/src/print/printSelector.ts +8 -9
- package/src/print/printSelectors.ts +12 -13
- package/src/print/printSharedListeners.ts +20 -21
- package/src/print/printValues.ts +5 -6
- package/src/utils.ts +14 -14
- package/src/visit/visit.ts +2 -2
- package/src/visit/visitActions.ts +12 -10
- package/src/visit/visitListeners.ts +8 -8
- package/src/visit/visitLoaders.ts +49 -43
- package/src/visit/visitReducers.ts +1 -1
- package/src/visit/visitSelectors.ts +3 -3
- package/src/visit/visitSharedListeners.ts +8 -10
- package/src/write/write.ts +29 -24
|
@@ -1,39 +1,38 @@
|
|
|
1
|
-
import
|
|
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
|
|
6
|
+
return factory.createTypeLiteralNode(
|
|
7
7
|
cleanDuplicateAnyNodes(parsedLogic.reducers.concat(parsedLogic.selectors)).map((reducer) => {
|
|
8
|
-
return
|
|
8
|
+
return factory.createPropertySignature(
|
|
9
9
|
undefined,
|
|
10
|
-
|
|
10
|
+
factory.createIdentifier(reducer.name),
|
|
11
11
|
undefined,
|
|
12
|
-
|
|
12
|
+
factory.createFunctionTypeNode(
|
|
13
13
|
undefined,
|
|
14
14
|
[
|
|
15
|
-
|
|
15
|
+
factory.createParameterDeclaration(
|
|
16
16
|
undefined,
|
|
17
17
|
undefined,
|
|
18
18
|
undefined,
|
|
19
|
-
|
|
19
|
+
factory.createIdentifier('state'),
|
|
20
20
|
undefined,
|
|
21
|
-
|
|
21
|
+
factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
|
|
22
22
|
undefined,
|
|
23
23
|
),
|
|
24
|
-
|
|
24
|
+
factory.createParameterDeclaration(
|
|
25
25
|
undefined,
|
|
26
26
|
undefined,
|
|
27
27
|
undefined,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
1
|
+
import { factory, SyntaxKind } from 'typescript'
|
|
2
2
|
import { ParsedLogic } from '../types'
|
|
3
3
|
|
|
4
4
|
export function printSharedListeners(parsedLogic: ParsedLogic) {
|
|
5
|
-
return
|
|
5
|
+
return factory.createTypeLiteralNode(
|
|
6
6
|
parsedLogic.sharedListeners.map(({ name, payload, action }) =>
|
|
7
|
-
|
|
7
|
+
factory.createPropertySignature(
|
|
8
8
|
undefined,
|
|
9
|
-
|
|
9
|
+
factory.createStringLiteral(name),
|
|
10
10
|
undefined,
|
|
11
|
-
|
|
11
|
+
factory.createFunctionTypeNode(
|
|
12
12
|
undefined,
|
|
13
13
|
[
|
|
14
|
-
|
|
14
|
+
factory.createParameterDeclaration(
|
|
15
15
|
undefined,
|
|
16
16
|
undefined,
|
|
17
17
|
undefined,
|
|
18
|
-
|
|
18
|
+
factory.createIdentifier('payload'),
|
|
19
19
|
undefined,
|
|
20
|
-
payload ||
|
|
20
|
+
payload || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
|
|
21
21
|
undefined,
|
|
22
22
|
),
|
|
23
|
-
|
|
23
|
+
factory.createParameterDeclaration(
|
|
24
24
|
undefined,
|
|
25
25
|
undefined,
|
|
26
26
|
undefined,
|
|
27
|
-
|
|
27
|
+
factory.createIdentifier('breakpoint'),
|
|
28
28
|
undefined,
|
|
29
|
-
|
|
29
|
+
factory.createTypeReferenceNode(factory.createIdentifier('BreakPointFunction'), undefined),
|
|
30
30
|
undefined,
|
|
31
31
|
),
|
|
32
|
-
|
|
32
|
+
factory.createParameterDeclaration(
|
|
33
33
|
undefined,
|
|
34
34
|
undefined,
|
|
35
35
|
undefined,
|
|
36
|
-
|
|
36
|
+
factory.createIdentifier('action'),
|
|
37
37
|
undefined,
|
|
38
38
|
action,
|
|
39
39
|
undefined,
|
|
40
40
|
),
|
|
41
|
-
|
|
41
|
+
factory.createParameterDeclaration(
|
|
42
42
|
undefined,
|
|
43
43
|
undefined,
|
|
44
44
|
undefined,
|
|
45
|
-
|
|
45
|
+
factory.createIdentifier('previousState'),
|
|
46
46
|
undefined,
|
|
47
|
-
|
|
47
|
+
factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
|
|
48
48
|
undefined,
|
|
49
49
|
),
|
|
50
50
|
],
|
|
51
|
-
|
|
52
|
-
{ ...
|
|
53
|
-
|
|
54
|
-
{ ...
|
|
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
|
)
|
package/src/print/printValues.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { factory } from 'typescript'
|
|
2
2
|
import { ParsedLogic } from '../types'
|
|
3
|
-
import {cleanDuplicateAnyNodes} from
|
|
3
|
+
import { cleanDuplicateAnyNodes } from '../utils'
|
|
4
4
|
|
|
5
5
|
export function printValues(parsedLogic: ParsedLogic) {
|
|
6
|
-
return
|
|
6
|
+
return factory.createTypeLiteralNode(
|
|
7
7
|
cleanDuplicateAnyNodes(parsedLogic.reducers.concat(parsedLogic.selectors)).map((reducer) => {
|
|
8
|
-
return
|
|
8
|
+
return factory.createPropertySignature(
|
|
9
9
|
undefined,
|
|
10
|
-
|
|
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 ===
|
|
58
|
-
typeNode =
|
|
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 =
|
|
60
|
+
typeNode = factory.createKeywordTypeNode(SyntaxKind.StringKeyword)
|
|
61
61
|
} else if (ts.isNumericLiteral(node)) {
|
|
62
|
-
typeNode =
|
|
62
|
+
typeNode = factory.createKeywordTypeNode(SyntaxKind.NumberKeyword)
|
|
63
63
|
} else if (ts.isArrayLiteralExpression(node) && node.elements.length === 0) {
|
|
64
|
-
typeNode =
|
|
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 =
|
|
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
|
|
85
|
+
return factory.createParameterDeclaration(
|
|
86
86
|
undefined,
|
|
87
87
|
undefined,
|
|
88
88
|
undefined,
|
|
89
|
-
|
|
90
|
-
param.initializer || param.questionToken ?
|
|
91
|
-
cloneNode(param.type ||
|
|
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 ===
|
|
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 ===
|
|
338
|
-
unPromised.kind ===
|
|
337
|
+
unPromised.kind === SyntaxKind.AnyKeyword ||
|
|
338
|
+
unPromised.kind === SyntaxKind.UnknownKeyword ||
|
|
339
339
|
(ts.isTypeLiteralNode(unPromised) && unPromised.members.length === 0)
|
|
340
340
|
)
|
|
341
341
|
}
|
package/src/visit/visit.ts
CHANGED
|
@@ -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
|
|
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:
|
|
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 (!
|
|
18
|
+
if (!isPropertyAssignment(property.valueDeclaration)) {
|
|
19
19
|
continue
|
|
20
20
|
}
|
|
21
21
|
const { initializer } = property.valueDeclaration
|
|
22
22
|
|
|
23
|
-
if (
|
|
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
|
|
29
|
+
return factory.createParameterDeclaration(
|
|
30
30
|
undefined,
|
|
31
31
|
undefined,
|
|
32
32
|
undefined,
|
|
33
|
-
|
|
34
|
-
param.initializer || param.questionToken
|
|
35
|
-
|
|
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 =
|
|
62
|
-
|
|
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
|
|
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:
|
|
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
|
|
27
|
+
const value = (property.valueDeclaration as PropertyAssignment).initializer
|
|
18
28
|
|
|
19
29
|
let defaultValue
|
|
20
30
|
let objectLiteral
|
|
21
|
-
if (
|
|
31
|
+
if (isArrayLiteralExpression(value)) {
|
|
22
32
|
defaultValue = value.elements[0]
|
|
23
33
|
objectLiteral = value.elements[1]
|
|
24
|
-
} else if (
|
|
34
|
+
} else if (isObjectLiteralExpression(value)) {
|
|
25
35
|
defaultValue = (value.properties.find(
|
|
26
36
|
(property) => checker.getSymbolAtLocation(property.name)?.getName() === '__default',
|
|
27
|
-
) as
|
|
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:
|
|
48
|
+
typeNode: factory.createKeywordTypeNode(SyntaxKind.BooleanKeyword),
|
|
39
49
|
})
|
|
40
50
|
|
|
41
51
|
if (objectLiteral) {
|
|
42
|
-
;(objectLiteral.properties || []).forEach((property:
|
|
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 (!
|
|
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 ||
|
|
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:
|
|
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 ||
|
|
95
|
+
returnTypeNode = defaultValueTypeNode || factory.createKeywordTypeNode(SyntaxKind.AnyKeyword)
|
|
86
96
|
}
|
|
87
97
|
|
|
88
98
|
if (
|
|
89
|
-
|
|
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
|
-
|
|
108
|
+
factory.createParameterDeclaration(
|
|
99
109
|
undefined,
|
|
100
110
|
undefined,
|
|
101
111
|
undefined,
|
|
102
|
-
|
|
112
|
+
factory.createIdentifier(loaderName),
|
|
103
113
|
undefined,
|
|
104
114
|
returnTypeNode,
|
|
105
115
|
undefined,
|
|
106
116
|
),
|
|
107
|
-
|
|
117
|
+
factory.createParameterDeclaration(
|
|
108
118
|
undefined,
|
|
109
119
|
undefined,
|
|
110
120
|
undefined,
|
|
111
|
-
|
|
112
|
-
|
|
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 =
|
|
118
|
-
|
|
127
|
+
const successReturnTypeNode = factory.createTypeLiteralNode([
|
|
128
|
+
factory.createPropertySignature(
|
|
119
129
|
undefined,
|
|
120
|
-
|
|
130
|
+
factory.createIdentifier(loaderName),
|
|
121
131
|
undefined,
|
|
122
132
|
returnTypeNode,
|
|
123
|
-
undefined,
|
|
124
133
|
),
|
|
125
|
-
|
|
134
|
+
factory.createPropertySignature(
|
|
126
135
|
undefined,
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
150
|
+
factory.createParameterDeclaration(
|
|
143
151
|
undefined,
|
|
144
152
|
undefined,
|
|
145
153
|
undefined,
|
|
146
|
-
|
|
154
|
+
factory.createIdentifier('error'),
|
|
147
155
|
undefined,
|
|
148
|
-
|
|
156
|
+
factory.createKeywordTypeNode(SyntaxKind.StringKeyword),
|
|
149
157
|
undefined,
|
|
150
158
|
),
|
|
151
|
-
|
|
159
|
+
factory.createParameterDeclaration(
|
|
152
160
|
undefined,
|
|
153
161
|
undefined,
|
|
154
162
|
undefined,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
163
|
+
factory.createIdentifier('errorObject'),
|
|
164
|
+
factory.createToken(SyntaxKind.QuestionToken),
|
|
165
|
+
factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
|
|
158
166
|
undefined,
|
|
159
167
|
),
|
|
160
168
|
]
|
|
161
|
-
const failureReturnTypeNode =
|
|
162
|
-
|
|
169
|
+
const failureReturnTypeNode = factory.createTypeLiteralNode([
|
|
170
|
+
factory.createPropertySignature(
|
|
163
171
|
undefined,
|
|
164
|
-
|
|
165
|
-
undefined,
|
|
166
|
-
ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
172
|
+
factory.createIdentifier('error'),
|
|
167
173
|
undefined,
|
|
174
|
+
factory.createKeywordTypeNode(SyntaxKind.StringKeyword),
|
|
168
175
|
),
|
|
169
|
-
|
|
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
|
-
|
|
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
|
})
|