@react-native-windows/codegen 0.71.3 → 0.71.4
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 +12 -4
- package/lib-commonjs/generators/ObjectTypes.d.ts +1 -0
- package/lib-commonjs/generators/ObjectTypes.js +26 -6
- package/lib-commonjs/generators/ObjectTypes.js.map +1 -1
- package/lib-commonjs/generators/ParamTypes.js +50 -29
- package/lib-commonjs/generators/ParamTypes.js.map +1 -1
- package/lib-commonjs/generators/ReturnTypes.js +2 -36
- package/lib-commonjs/generators/ReturnTypes.js.map +1 -1
- package/lib-commonjs/generators/ValidateMethods.js +14 -9
- package/lib-commonjs/generators/ValidateMethods.js.map +1 -1
- package/package.json +2 -2
- package/src/generators/ObjectTypes.ts +44 -7
- package/src/generators/ParamTypes.ts +92 -50
- package/src/generators/ReturnTypes.ts +8 -45
- package/src/generators/ValidateMethods.ts +24 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
# Change Log - @react-native-windows/codegen
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Tue, 13 Jun 2023 16:24:58 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
-
## 0.71.
|
|
7
|
+
## 0.71.4
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Tue, 13 Jun 2023 16:24:58 GMT
|
|
10
10
|
|
|
11
11
|
### Patches
|
|
12
12
|
|
|
13
|
-
-
|
|
13
|
+
- Support enum/union and T in Promise<T> in codegen (53799235+ZihanChen-MSFT@users.noreply.github.com)
|
|
14
14
|
|
|
15
|
+
## 0.71.3
|
|
16
|
+
|
|
17
|
+
Thu, 13 Apr 2023 20:50:34 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- Fix RNW not being detected on case-sensitive file systems (4123478+tido64@users.noreply.github.com)
|
|
22
|
+
|
|
15
23
|
## 0.71.2
|
|
16
24
|
|
|
17
25
|
Mon, 27 Feb 2023 16:15:26 GMT
|
|
@@ -5,4 +5,5 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { NativeModuleBaseTypeAnnotation, Nullable } from 'react-native-tscodegen';
|
|
7
7
|
import { AliasMap } from './AliasManaging';
|
|
8
|
+
export declare function translateFieldOrReturnType(type: Nullable<NativeModuleBaseTypeAnnotation>, aliases: AliasMap, baseAliasName: string, callerName: 'translateField' | 'translateReturnType'): string;
|
|
8
9
|
export declare function translateField(type: Nullable<NativeModuleBaseTypeAnnotation>, aliases: AliasMap, baseAliasName: string): string;
|
|
@@ -5,9 +5,22 @@
|
|
|
5
5
|
*/
|
|
6
6
|
'use strict';
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.translateField = void 0;
|
|
8
|
+
exports.translateField = exports.translateFieldOrReturnType = void 0;
|
|
9
9
|
const AliasManaging_1 = require("./AliasManaging");
|
|
10
|
-
function
|
|
10
|
+
function translateUnionReturnType(type) {
|
|
11
|
+
const memberType = type.memberType;
|
|
12
|
+
switch (type.memberType) {
|
|
13
|
+
case 'StringTypeAnnotation':
|
|
14
|
+
return 'std::string';
|
|
15
|
+
case 'NumberTypeAnnotation':
|
|
16
|
+
return 'double';
|
|
17
|
+
case 'ObjectTypeAnnotation':
|
|
18
|
+
return '::React::JSValue';
|
|
19
|
+
default:
|
|
20
|
+
throw new Error(`Unknown enum/union member type in translateReturnType: ${memberType}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function translateFieldOrReturnType(type, aliases, baseAliasName, callerName) {
|
|
11
24
|
// avoid: Property 'type' does not exist on type 'never'
|
|
12
25
|
const returnType = type.type;
|
|
13
26
|
switch (type.type) {
|
|
@@ -23,7 +36,7 @@ function translateField(type, aliases, baseAliasName) {
|
|
|
23
36
|
return 'bool';
|
|
24
37
|
case 'ArrayTypeAnnotation':
|
|
25
38
|
if (type.elementType) {
|
|
26
|
-
return `std::vector<${
|
|
39
|
+
return `std::vector<${translateFieldOrReturnType(type.elementType, aliases, `${baseAliasName}_element`, callerName)}>`;
|
|
27
40
|
}
|
|
28
41
|
else {
|
|
29
42
|
return `::React::JSValueArray`;
|
|
@@ -38,16 +51,23 @@ function translateField(type, aliases, baseAliasName) {
|
|
|
38
51
|
// (#6597)
|
|
39
52
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
40
53
|
if (name !== 'RootTag')
|
|
41
|
-
throw new Error(`Unknown reserved function: ${name} in
|
|
54
|
+
throw new Error(`Unknown reserved function: ${name} in ${callerName}`);
|
|
42
55
|
return 'double';
|
|
43
56
|
}
|
|
44
57
|
case 'TypeAliasTypeAnnotation':
|
|
45
58
|
return (0, AliasManaging_1.getAliasCppName)(type.name);
|
|
46
59
|
case 'NullableTypeAnnotation':
|
|
47
|
-
return `std::optional<${
|
|
60
|
+
return `std::optional<${translateFieldOrReturnType(type.typeAnnotation, aliases, baseAliasName, callerName)}>`;
|
|
61
|
+
case 'EnumDeclaration':
|
|
62
|
+
case 'UnionTypeAnnotation':
|
|
63
|
+
return translateUnionReturnType(type);
|
|
48
64
|
default:
|
|
49
|
-
throw new Error(`Unhandled type in
|
|
65
|
+
throw new Error(`Unhandled type in ${callerName}: ${returnType}`);
|
|
50
66
|
}
|
|
51
67
|
}
|
|
68
|
+
exports.translateFieldOrReturnType = translateFieldOrReturnType;
|
|
69
|
+
function translateField(type, aliases, baseAliasName) {
|
|
70
|
+
return translateFieldOrReturnType(type, aliases, baseAliasName, 'translateField');
|
|
71
|
+
}
|
|
52
72
|
exports.translateField = translateField;
|
|
53
73
|
//# sourceMappingURL=ObjectTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectTypes.js","sourceRoot":"","sources":["../../src/generators/ObjectTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;
|
|
1
|
+
{"version":3,"file":"ObjectTypes.js","sourceRoot":"","sources":["../../src/generators/ObjectTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAQb,mDAIyB;AAEzB,SAAS,wBAAwB,CAC/B,IAAmE;IAEnE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,QAAQ,IAAI,CAAC,UAAU,EAAE;QACvB,KAAK,sBAAsB;YACzB,OAAO,aAAa,CAAC;QACvB,KAAK,sBAAsB;YACzB,OAAO,QAAQ,CAAC;QAClB,KAAK,sBAAsB;YACzB,OAAO,kBAAkB,CAAC;QAC5B;YACE,MAAM,IAAI,KAAK,CACb,0DAA0D,UAAU,EAAE,CACvE,CAAC;KACL;AACH,CAAC;AAED,SAAgB,0BAA0B,CACxC,IAA8C,EAC9C,OAAiB,EACjB,aAAqB,EACrB,UAAoD;IAEpD,wDAAwD;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,sBAAsB;YACzB,OAAO,aAAa,CAAC;QACvB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB;YACzB,OAAO,QAAQ,CAAC;QAClB,KAAK,qBAAqB;YACxB,OAAO,KAAK,CAAC;QACf,KAAK,uBAAuB;YAC1B,OAAO,MAAM,CAAC;QAChB,KAAK,qBAAqB;YACxB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,eAAe,0BAA0B,CAC9C,IAAI,CAAC,WAAW,EAChB,OAAO,EACP,GAAG,aAAa,UAAU,EAC1B,UAAU,CACX,GAAG,CAAC;aACN;iBAAM;gBACL,OAAO,uBAAuB,CAAC;aAChC;QACH,KAAK,6BAA6B;YAChC,OAAO,kBAAkB,CAAC;QAC5B,KAAK,sBAAsB;YACzB,OAAO,IAAA,wCAAwB,EAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAChE,KAAK,wBAAwB,CAAC,CAAC;YAC7B,wDAAwD;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,UAAU;YACV,uEAAuE;YACvE,IAAI,IAAI,KAAK,SAAS;gBACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,OAAO,UAAU,EAAE,CAAC,CAAC;YACzE,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,yBAAyB;YAC5B,OAAO,IAAA,+BAAe,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,wBAAwB;YAC3B,OAAO,iBAAiB,0BAA0B,CAChD,IAAI,CAAC,cAAc,EACnB,OAAO,EACP,aAAa,EACb,UAAU,CACX,GAAG,CAAC;QACP,KAAK,iBAAiB,CAAC;QACvB,KAAK,qBAAqB;YACxB,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,KAAK,UAAU,EAAE,CAAC,CAAC;KACrE;AACH,CAAC;AA1DD,gEA0DC;AAED,SAAgB,cAAc,CAC5B,IAA8C,EAC9C,OAAiB,EACjB,aAAqB;IAErB,OAAO,0BAA0B,CAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAXD,wCAWC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleEnumDeclaration,\n NativeModuleBaseTypeAnnotation,\n NativeModuleUnionTypeAnnotation,\n Nullable,\n} from 'react-native-tscodegen';\nimport {\n AliasMap,\n getAliasCppName,\n getAnonymousAliasCppName,\n} from './AliasManaging';\n\nfunction translateUnionReturnType(\n type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,\n): string {\n const memberType = type.memberType;\n switch (type.memberType) {\n case 'StringTypeAnnotation':\n return 'std::string';\n case 'NumberTypeAnnotation':\n return 'double';\n case 'ObjectTypeAnnotation':\n return '::React::JSValue';\n default:\n throw new Error(\n `Unknown enum/union member type in translateReturnType: ${memberType}`,\n );\n }\n}\n\nexport function translateFieldOrReturnType(\n type: Nullable<NativeModuleBaseTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n callerName: 'translateField' | 'translateReturnType',\n): string {\n // avoid: Property 'type' does not exist on type 'never'\n const returnType = type.type;\n switch (type.type) {\n case 'StringTypeAnnotation':\n return 'std::string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n return 'double';\n case 'Int32TypeAnnotation':\n return 'int';\n case 'BooleanTypeAnnotation':\n return 'bool';\n case 'ArrayTypeAnnotation':\n if (type.elementType) {\n return `std::vector<${translateFieldOrReturnType(\n type.elementType,\n aliases,\n `${baseAliasName}_element`,\n callerName,\n )}>`;\n } else {\n return `::React::JSValueArray`;\n }\n case 'GenericObjectTypeAnnotation':\n return '::React::JSValue';\n case 'ObjectTypeAnnotation':\n return getAnonymousAliasCppName(aliases, baseAliasName, type);\n case 'ReservedTypeAnnotation': {\n // avoid: Property 'name' does not exist on type 'never'\n const name = type.name;\n // (#6597)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (name !== 'RootTag')\n throw new Error(`Unknown reserved function: ${name} in ${callerName}`);\n return 'double';\n }\n case 'TypeAliasTypeAnnotation':\n return getAliasCppName(type.name);\n case 'NullableTypeAnnotation':\n return `std::optional<${translateFieldOrReturnType(\n type.typeAnnotation,\n aliases,\n baseAliasName,\n callerName,\n )}>`;\n case 'EnumDeclaration':\n case 'UnionTypeAnnotation':\n return translateUnionReturnType(type);\n default:\n throw new Error(`Unhandled type in ${callerName}: ${returnType}`);\n }\n}\n\nexport function translateField(\n type: Nullable<NativeModuleBaseTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateField',\n );\n}\n"]}
|
|
@@ -17,6 +17,50 @@ function decorateType(type, target) {
|
|
|
17
17
|
return type;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
function translateUnionReturnType(type, target) {
|
|
21
|
+
const memberType = type.memberType;
|
|
22
|
+
switch (type.memberType) {
|
|
23
|
+
case 'StringTypeAnnotation':
|
|
24
|
+
return 'std::string';
|
|
25
|
+
case 'NumberTypeAnnotation':
|
|
26
|
+
return 'double';
|
|
27
|
+
case 'ObjectTypeAnnotation':
|
|
28
|
+
return decorateType('::React::JSValue', target);
|
|
29
|
+
default:
|
|
30
|
+
throw new Error(`Unknown enum/union member type in translateReturnType: ${memberType}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function translateFunction(param, aliases, baseAliasName, target) {
|
|
34
|
+
// TODO: type.returnTypeAnnotation
|
|
35
|
+
switch (target) {
|
|
36
|
+
case 'spec':
|
|
37
|
+
return `Callback<${param.params
|
|
38
|
+
.map((p) => translateSpecFunctionParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
39
|
+
.join(', ')}>`;
|
|
40
|
+
case 'template':
|
|
41
|
+
return `std::function<void(${param.params
|
|
42
|
+
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
43
|
+
.join(', ')})>`;
|
|
44
|
+
default:
|
|
45
|
+
return `std::function<void(${param.params
|
|
46
|
+
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
47
|
+
.join(', ')})> const &`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function translateArray(param, aliases, baseAliasName, target) {
|
|
51
|
+
if (param.elementType) {
|
|
52
|
+
switch (target) {
|
|
53
|
+
case 'spec':
|
|
54
|
+
case 'template':
|
|
55
|
+
return `std::vector<${translateNullableParamType(param.elementType, aliases, `${baseAliasName}_element`, 'template', 'template')}>`;
|
|
56
|
+
default:
|
|
57
|
+
return `std::vector<${translateNullableParamType(param.elementType, aliases, `${baseAliasName}_element`, 'template', 'template')}> const &`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return decorateType('::React::JSValueArray', target);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
20
64
|
function translateParam(param, aliases, baseAliasName, target) {
|
|
21
65
|
// avoid: Property 'type' does not exist on type 'never'
|
|
22
66
|
const paramType = param.type;
|
|
@@ -31,36 +75,10 @@ function translateParam(param, aliases, baseAliasName, target) {
|
|
|
31
75
|
return 'int';
|
|
32
76
|
case 'BooleanTypeAnnotation':
|
|
33
77
|
return 'bool';
|
|
34
|
-
case 'FunctionTypeAnnotation':
|
|
35
|
-
|
|
36
|
-
switch (target) {
|
|
37
|
-
case 'spec':
|
|
38
|
-
return `Callback<${param.params
|
|
39
|
-
.map((p) => translateSpecFunctionParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
40
|
-
.join(', ')}>`;
|
|
41
|
-
case 'template':
|
|
42
|
-
return `std::function<void(${param.params
|
|
43
|
-
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
44
|
-
.join(', ')})>`;
|
|
45
|
-
default:
|
|
46
|
-
return `std::function<void(${param.params
|
|
47
|
-
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`))
|
|
48
|
-
.join(', ')})> const &`;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
78
|
+
case 'FunctionTypeAnnotation':
|
|
79
|
+
return translateFunction(param, aliases, baseAliasName, target);
|
|
51
80
|
case 'ArrayTypeAnnotation':
|
|
52
|
-
|
|
53
|
-
switch (target) {
|
|
54
|
-
case 'spec':
|
|
55
|
-
case 'template':
|
|
56
|
-
return `std::vector<${translateNullableParamType(param.elementType, aliases, `${baseAliasName}_element`, 'template', 'template')}>`;
|
|
57
|
-
default:
|
|
58
|
-
return `std::vector<${translateNullableParamType(param.elementType, aliases, `${baseAliasName}_element`, 'template', 'template')}> const &`;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
return decorateType('::React::JSValueArray', target);
|
|
63
|
-
}
|
|
81
|
+
return translateArray(param, aliases, baseAliasName, target);
|
|
64
82
|
case 'GenericObjectTypeAnnotation':
|
|
65
83
|
return decorateType('::React::JSValue', target);
|
|
66
84
|
case 'ObjectTypeAnnotation':
|
|
@@ -76,6 +94,9 @@ function translateParam(param, aliases, baseAliasName, target) {
|
|
|
76
94
|
}
|
|
77
95
|
case 'TypeAliasTypeAnnotation':
|
|
78
96
|
return decorateType((0, AliasManaging_1.getAliasCppName)(param.name), target);
|
|
97
|
+
case 'EnumDeclaration':
|
|
98
|
+
case 'UnionTypeAnnotation':
|
|
99
|
+
return translateUnionReturnType(param, target);
|
|
79
100
|
default:
|
|
80
101
|
throw new Error(`Unhandled type in translateParam: ${paramType}`);
|
|
81
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParamTypes.js","sourceRoot":"","sources":["../../src/generators/ParamTypes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NamedShape,\n NativeModuleParamTypeAnnotation,\n Nullable,\n} from 'react-native-tscodegen';\nimport {\n AliasMap,\n getAliasCppName,\n getAnonymousAliasCppName,\n} from './AliasManaging';\n\ntype NativeModuleParamShape = NamedShape<\n Nullable<NativeModuleParamTypeAnnotation>\n>;\n\ntype ParamTarget = 'spec' | 'template' | 'callback-arg' | 'method-arg';\n\nfunction decorateType(type: string, target: ParamTarget): string {\n switch (target) {\n case 'method-arg':\n return `${type} &&`;\n case 'callback-arg':\n return `${type} const &`;\n default:\n return type;\n }\n}\n\nfunction translateParam(\n param: NativeModuleParamTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n target: ParamTarget,\n): string {\n // avoid: Property 'type' does not exist on type 'never'\n const paramType = param.type;\n switch (param.type) {\n case 'StringTypeAnnotation':\n return 'std::string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n return 'double';\n case 'Int32TypeAnnotation':\n return 'int';\n case 'BooleanTypeAnnotation':\n return 'bool';\n case 'FunctionTypeAnnotation': {\n // TODO: type.returnTypeAnnotation\n switch (target) {\n case 'spec':\n return `Callback<${param.params\n .map((p: NativeModuleParamShape) =>\n translateSpecFunctionParam(\n p,\n aliases,\n `${baseAliasName}_${p.name}`,\n ),\n )\n .join(', ')}>`;\n case 'template':\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),\n )\n .join(', ')})>`;\n default:\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),\n )\n .join(', ')})> const &`;\n }\n }\n case 'ArrayTypeAnnotation':\n if (param.elementType) {\n switch (target) {\n case 'spec':\n case 'template':\n return `std::vector<${translateNullableParamType(\n param.elementType,\n aliases,\n `${baseAliasName}_element`,\n 'template',\n 'template',\n )}>`;\n default:\n return `std::vector<${translateNullableParamType(\n param.elementType,\n aliases,\n `${baseAliasName}_element`,\n 'template',\n 'template',\n )}> const &`;\n }\n } else {\n return decorateType('::React::JSValueArray', target);\n }\n case 'GenericObjectTypeAnnotation':\n return decorateType('::React::JSValue', target);\n case 'ObjectTypeAnnotation':\n return decorateType(\n getAnonymousAliasCppName(aliases, baseAliasName, param),\n target,\n );\n case 'ReservedTypeAnnotation': {\n // avoid: Property 'name' does not exist on type 'never'\n const name = param.name;\n // (#6597)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (name !== 'RootTag')\n throw new Error(`Unknown reserved function: ${name} in translateParam`);\n return 'double';\n }\n case 'TypeAliasTypeAnnotation':\n return decorateType(getAliasCppName(param.name), target);\n default:\n throw new Error(`Unhandled type in translateParam: ${paramType}`);\n }\n}\n\nfunction translateNullableParamType(\n paramType: Nullable<NativeModuleParamTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n nullableTarget: ParamTarget,\n target: ParamTarget,\n): string {\n switch (paramType.type) {\n case 'NullableTypeAnnotation':\n return `std::optional<${translateParam(\n paramType.typeAnnotation,\n aliases,\n baseAliasName,\n nullableTarget,\n )}>`;\n default:\n return translateParam(paramType, aliases, baseAliasName, target);\n }\n}\n\nfunction translateSpecFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'spec',\n 'spec',\n );\n}\n\nfunction translateCallbackParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'callback-arg',\n );\n}\n\nfunction translateFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'method-arg',\n );\n}\n\nexport function translateSpecArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return params.map(param => {\n const translatedParam = translateSpecFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n );\n return `${translatedParam}`;\n });\n}\n\nexport function translateArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return params.map(param => {\n const translatedParam = translateFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n );\n return `${translatedParam} ${param.name}`;\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ParamTypes.js","sourceRoot":"","sources":["../../src/generators/ParamTypes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NamedShape,\n NativeModuleArrayTypeAnnotation,\n NativeModuleBaseTypeAnnotation,\n NativeModuleEnumDeclaration,\n NativeModuleFunctionTypeAnnotation,\n NativeModuleParamTypeAnnotation,\n NativeModuleUnionTypeAnnotation,\n Nullable,\n} from 'react-native-tscodegen';\nimport {\n AliasMap,\n getAliasCppName,\n getAnonymousAliasCppName,\n} from './AliasManaging';\n\ntype NativeModuleParamShape = NamedShape<\n Nullable<NativeModuleParamTypeAnnotation>\n>;\n\ntype ParamTarget = 'spec' | 'template' | 'callback-arg' | 'method-arg';\n\nfunction decorateType(type: string, target: ParamTarget): string {\n switch (target) {\n case 'method-arg':\n return `${type} &&`;\n case 'callback-arg':\n return `${type} const &`;\n default:\n return type;\n }\n}\n\nfunction translateUnionReturnType(\n type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,\n target: ParamTarget,\n): string {\n const memberType = type.memberType;\n switch (type.memberType) {\n case 'StringTypeAnnotation':\n return 'std::string';\n case 'NumberTypeAnnotation':\n return 'double';\n case 'ObjectTypeAnnotation':\n return decorateType('::React::JSValue', target);\n default:\n throw new Error(\n `Unknown enum/union member type in translateReturnType: ${memberType}`,\n );\n }\n}\n\nfunction translateFunction(\n param: NativeModuleFunctionTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n target: ParamTarget,\n): string {\n // TODO: type.returnTypeAnnotation\n switch (target) {\n case 'spec':\n return `Callback<${param.params\n .map((p: NativeModuleParamShape) =>\n translateSpecFunctionParam(p, aliases, `${baseAliasName}_${p.name}`),\n )\n .join(', ')}>`;\n case 'template':\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),\n )\n .join(', ')})>`;\n default:\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),\n )\n .join(', ')})> const &`;\n }\n}\n\nfunction translateArray(\n param: NativeModuleArrayTypeAnnotation<\n Nullable<NativeModuleBaseTypeAnnotation>\n >,\n aliases: AliasMap,\n baseAliasName: string,\n target: ParamTarget,\n): string {\n if (param.elementType) {\n switch (target) {\n case 'spec':\n case 'template':\n return `std::vector<${translateNullableParamType(\n param.elementType,\n aliases,\n `${baseAliasName}_element`,\n 'template',\n 'template',\n )}>`;\n default:\n return `std::vector<${translateNullableParamType(\n param.elementType,\n aliases,\n `${baseAliasName}_element`,\n 'template',\n 'template',\n )}> const &`;\n }\n } else {\n return decorateType('::React::JSValueArray', target);\n }\n}\n\nfunction translateParam(\n param: NativeModuleParamTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n target: ParamTarget,\n): string {\n // avoid: Property 'type' does not exist on type 'never'\n const paramType = param.type;\n switch (param.type) {\n case 'StringTypeAnnotation':\n return 'std::string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n return 'double';\n case 'Int32TypeAnnotation':\n return 'int';\n case 'BooleanTypeAnnotation':\n return 'bool';\n case 'FunctionTypeAnnotation':\n return translateFunction(param, aliases, baseAliasName, target);\n case 'ArrayTypeAnnotation':\n return translateArray(param, aliases, baseAliasName, target);\n case 'GenericObjectTypeAnnotation':\n return decorateType('::React::JSValue', target);\n case 'ObjectTypeAnnotation':\n return decorateType(\n getAnonymousAliasCppName(aliases, baseAliasName, param),\n target,\n );\n case 'ReservedTypeAnnotation': {\n // avoid: Property 'name' does not exist on type 'never'\n const name = param.name;\n // (#6597)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (name !== 'RootTag')\n throw new Error(`Unknown reserved function: ${name} in translateParam`);\n return 'double';\n }\n case 'TypeAliasTypeAnnotation':\n return decorateType(getAliasCppName(param.name), target);\n case 'EnumDeclaration':\n case 'UnionTypeAnnotation':\n return translateUnionReturnType(param, target);\n default:\n throw new Error(`Unhandled type in translateParam: ${paramType}`);\n }\n}\n\nfunction translateNullableParamType(\n paramType: Nullable<NativeModuleParamTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n nullableTarget: ParamTarget,\n target: ParamTarget,\n): string {\n switch (paramType.type) {\n case 'NullableTypeAnnotation':\n return `std::optional<${translateParam(\n paramType.typeAnnotation,\n aliases,\n baseAliasName,\n nullableTarget,\n )}>`;\n default:\n return translateParam(paramType, aliases, baseAliasName, target);\n }\n}\n\nfunction translateSpecFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'spec',\n 'spec',\n );\n}\n\nfunction translateCallbackParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'callback-arg',\n );\n}\n\nfunction translateFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'method-arg',\n );\n}\n\nexport function translateSpecArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return params.map(param => {\n const translatedParam = translateSpecFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n );\n return `${translatedParam}`;\n });\n}\n\nexport function translateArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return params.map(param => {\n const translatedParam = translateFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n );\n return `${translatedParam} ${param.name}`;\n });\n}\n"]}
|
|
@@ -6,50 +6,16 @@
|
|
|
6
6
|
'use strict';
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.translateImplReturnType = exports.translateSpecReturnType = void 0;
|
|
9
|
-
const
|
|
9
|
+
const ObjectTypes_1 = require("./ObjectTypes");
|
|
10
10
|
function translateReturnType(type, aliases, baseAliasName) {
|
|
11
|
-
// avoid: Property 'type' does not exist on type 'never'
|
|
12
|
-
const returnType = type.type;
|
|
13
11
|
switch (type.type) {
|
|
14
12
|
case 'VoidTypeAnnotation':
|
|
15
13
|
case 'PromiseTypeAnnotation':
|
|
16
14
|
return 'void';
|
|
17
|
-
case 'StringTypeAnnotation':
|
|
18
|
-
return 'std::string';
|
|
19
|
-
case 'NumberTypeAnnotation':
|
|
20
|
-
case 'FloatTypeAnnotation':
|
|
21
|
-
case 'DoubleTypeAnnotation':
|
|
22
|
-
return 'double';
|
|
23
|
-
case 'Int32TypeAnnotation':
|
|
24
|
-
return 'int';
|
|
25
|
-
case 'BooleanTypeAnnotation':
|
|
26
|
-
return 'bool';
|
|
27
|
-
case 'ArrayTypeAnnotation':
|
|
28
|
-
if (type.elementType) {
|
|
29
|
-
return `std::vector<${translateReturnType(type.elementType, aliases, `${baseAliasName}_element`)}>`;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
return '::React::JSValueArray';
|
|
33
|
-
}
|
|
34
|
-
case 'GenericObjectTypeAnnotation':
|
|
35
|
-
return '::React::JSValue';
|
|
36
|
-
case 'ObjectTypeAnnotation':
|
|
37
|
-
return (0, AliasManaging_1.getAnonymousAliasCppName)(aliases, baseAliasName, type);
|
|
38
|
-
case 'ReservedTypeAnnotation': {
|
|
39
|
-
// avoid: Property 'name' does not exist on type 'never'
|
|
40
|
-
const name = type.name;
|
|
41
|
-
// (#6597)
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
43
|
-
if (name !== 'RootTag')
|
|
44
|
-
throw new Error(`Unknown reserved function: ${name} in translateReturnType`);
|
|
45
|
-
return 'double';
|
|
46
|
-
}
|
|
47
|
-
case 'TypeAliasTypeAnnotation':
|
|
48
|
-
return (0, AliasManaging_1.getAliasCppName)(type.name);
|
|
49
15
|
case 'NullableTypeAnnotation':
|
|
50
16
|
return `std::optional<${translateReturnType(type.typeAnnotation, aliases, baseAliasName)}>`;
|
|
51
17
|
default:
|
|
52
|
-
|
|
18
|
+
return (0, ObjectTypes_1.translateFieldOrReturnType)(type, aliases, baseAliasName, 'translateReturnType');
|
|
53
19
|
}
|
|
54
20
|
}
|
|
55
21
|
function translateSpecReturnType(type, aliases, baseAliasName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReturnTypes.js","sourceRoot":"","sources":["../../src/generators/ReturnTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;
|
|
1
|
+
{"version":3,"file":"ReturnTypes.js","sourceRoot":"","sources":["../../src/generators/ReturnTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAOb,+CAAyD;AAEzD,SAAS,mBAAmB,CAC1B,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB;YAC1B,OAAO,MAAM,CAAC;QAChB,KAAK,wBAAwB;YAC3B,OAAO,iBAAiB,mBAAmB,CACzC,IAAI,CAAC,cAAc,EACnB,OAAO,EACP,aAAa,CACd,GAAG,CAAC;QACP;YACE,OAAO,IAAA,wCAA0B,EAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,qBAAqB,CACtB,CAAC;KACL;AACH,CAAC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,aAAa,CAAC,CAAC;AAC3E,CAAC;AAND,0DAMC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,aAAa,CAAC,CAAC;AAC3E,CAAC;AAND,0DAMC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleReturnTypeAnnotation,\n Nullable,\n} from 'react-native-tscodegen';\nimport {AliasMap} from './AliasManaging';\nimport {translateFieldOrReturnType} from './ObjectTypes';\n\nfunction translateReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n switch (type.type) {\n case 'VoidTypeAnnotation':\n case 'PromiseTypeAnnotation':\n return 'void';\n case 'NullableTypeAnnotation':\n return `std::optional<${translateReturnType(\n type.typeAnnotation,\n aliases,\n baseAliasName,\n )}>`;\n default:\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateReturnType',\n );\n }\n}\n\nexport function translateSpecReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return translateReturnType(type, aliases, `${baseAliasName}_returnType`);\n}\n\nexport function translateImplReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return translateReturnType(type, aliases, `${baseAliasName}_returnType`);\n}\n"]}
|
|
@@ -12,14 +12,15 @@ function isMethodSync(funcType) {
|
|
|
12
12
|
return (funcType.returnTypeAnnotation.type !== 'VoidTypeAnnotation' &&
|
|
13
13
|
funcType.returnTypeAnnotation.type !== 'PromiseTypeAnnotation');
|
|
14
14
|
}
|
|
15
|
-
function isMethodReturnPromise(funcType) {
|
|
16
|
-
return funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation';
|
|
17
|
-
}
|
|
18
15
|
function getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName) {
|
|
19
16
|
const args = (0, ParamTypes_1.translateArgs)(funcType.params, aliases, baseAliasName);
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
|
|
18
|
+
if (funcType.returnTypeAnnotation.elementType) {
|
|
19
|
+
args.push(`::React::ReactPromise<${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation.elementType, aliases, baseAliasName)}> &&result`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
args.push('::React::ReactPromise<::React::JSValue> &&result');
|
|
23
|
+
}
|
|
23
24
|
}
|
|
24
25
|
// TODO: be much more exhastive on the possible method signatures that can be used..
|
|
25
26
|
const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
|
|
@@ -44,9 +45,13 @@ function renderProperties(properties, aliases, tuple) {
|
|
|
44
45
|
: prop.typeAnnotation;
|
|
45
46
|
const traversedArgs = (0, ParamTypes_1.translateSpecArgs)(funcType.params, aliases, propAliasName);
|
|
46
47
|
const translatedReturnParam = (0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation, aliases, propAliasName);
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
|
|
49
|
+
if (funcType.returnTypeAnnotation.elementType) {
|
|
50
|
+
traversedArgs.push(`Promise<${(0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation.elementType, aliases, propAliasName)}>`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
traversedArgs.push('Promise<::React::JSValue>');
|
|
54
|
+
}
|
|
50
55
|
}
|
|
51
56
|
if (tuple) {
|
|
52
57
|
return ` ${isMethodSync(funcType) ? 'Sync' : ''}Method<${translatedReturnParam}(${traversedArgs.join(', ')}) noexcept>{${index}, L"${prop.name}"},`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidateMethods.js","sourceRoot":"","sources":["../../src/generators/ValidateMethods.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAQb,6CAA8D;AAC9D,+CAA+E;AAE/E,SAAS,YAAY,CAAC,QAA4C;IAChE,OAAO,CACL,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,oBAAoB;QAC3D,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,uBAAuB,CAC/D,CAAC;AACJ,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"ValidateMethods.js","sourceRoot":"","sources":["../../src/generators/ValidateMethods.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAQb,6CAA8D;AAC9D,+CAA+E;AAE/E,SAAS,YAAY,CAAC,QAA4C;IAChE,OAAO,CACL,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,oBAAoB;QAC3D,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,uBAAuB,CAC/D,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,IAA+B,EAC/B,QAA4C,EAC5C,OAAiB,EACjB,aAAqB;IAErB,MAAM,IAAI,GAAG,IAAA,0BAAa,EAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,uBAAuB,EAAE;QAClE,IAAI,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EAAE;YAC7C,IAAI,CAAC,IAAI,CACP,yBAAyB,IAAA,qCAAuB,EAC9C,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EACzC,OAAO,EACP,aAAa,CACd,YAAY,CACd,CAAC;SACH;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;SAC/D;KACF;IAED,oFAAoF;IACpF,MAAM,GAAG,GAAG,SAAS,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UACxD,IAAI,CAAC,IACP,KAAK,IAAA,qCAAuB,EAC1B,QAAQ,CAAC,oBAAoB,EAC7B,OAAO,EACP,aAAa,CACd,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC;IAEvE,MAAM,SAAS,GAAG,SAAS,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAC9D,IAAI,CAAC,IACP,YAAY,IAAA,qCAAuB,EACjC,QAAQ,CAAC,oBAAoB,EAC7B,OAAO,EACP,aAAa,CACd,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC;IAEvE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iCAAiC,CACxC,IAA+B,EAC/B,QAA4C,EAC5C,OAAiB,EACjB,aAAqB;IAErB,OAAO,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC;SAC7B,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAoD,EACpD,OAAiB,EACjB,KAAc;IAEd,oCAAoC;IACpC,OAAO,UAAU;SACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;SAC5C,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,+BAA+B;QAC/B,8DAA8D;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;QAChC,MAAM,QAAQ,GACZ,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,wBAAwB;YACnD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc;YACpC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAE1B,MAAM,aAAa,GAAG,IAAA,8BAAiB,EACrC,QAAQ,CAAC,MAAM,EACf,OAAO,EACP,aAAa,CACd,CAAC;QAEF,MAAM,qBAAqB,GAAG,IAAA,qCAAuB,EACnD,QAAQ,CAAC,oBAAoB,EAC7B,OAAO,EACP,aAAa,CACd,CAAC;QAEF,IAAI,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,uBAAuB,EAAE;YAClE,IAAI,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EAAE;gBAC7C,aAAa,CAAC,IAAI,CAChB,WAAW,IAAA,qCAAuB,EAChC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EACzC,OAAO,EACP,aAAa,CACd,GAAG,CACL,CAAC;aACH;iBAAM;gBACL,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;aACjD;SACF;QAED,IAAI,KAAK,EAAE;YACT,OAAO,SACL,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EACpC,UAAU,qBAAqB,IAAI,aAAa,CAAC,IAAI,CACnD,IAAI,CACL,eAAe,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;SAC5C;aAAM;YACL,OAAO;YACH,KAAK;aACJ,IAAI,CAAC,IAAI;YACV,iCAAiC,CACjC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,aAAa,CACd,IAAI,CAAC;SACT;IACH,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAgB,uBAAuB,CACrC,YAAgC,EAChC,OAAiB;IAEjB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IAChD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;AACxD,CAAC;AARD,0DAQC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleFunctionTypeAnnotation,\n NativeModulePropertyShape,\n NativeModuleSchema,\n} from 'react-native-tscodegen';\nimport {AliasMap} from './AliasManaging';\nimport {translateArgs, translateSpecArgs} from './ParamTypes';\nimport {translateImplReturnType, translateSpecReturnType} from './ReturnTypes';\n\nfunction isMethodSync(funcType: NativeModuleFunctionTypeAnnotation) {\n return (\n funcType.returnTypeAnnotation.type !== 'VoidTypeAnnotation' &&\n funcType.returnTypeAnnotation.type !== 'PromiseTypeAnnotation'\n );\n}\n\nfunction getPossibleMethodSignatures(\n prop: NativeModulePropertyShape,\n funcType: NativeModuleFunctionTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n): string[] {\n const args = translateArgs(funcType.params, aliases, baseAliasName);\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n if (funcType.returnTypeAnnotation.elementType) {\n args.push(\n `::React::ReactPromise<${translateImplReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n baseAliasName,\n )}> &&result`,\n );\n } else {\n args.push('::React::ReactPromise<::React::JSValue> &&result');\n }\n }\n\n // TODO: be much more exhastive on the possible method signatures that can be used..\n const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${\n prop.name\n }) ${translateImplReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n baseAliasName,\n )} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;\n\n const staticsig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${\n prop.name\n }) static ${translateImplReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n baseAliasName,\n )} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;\n\n return [sig, staticsig];\n}\n\nfunction translatePossibleMethodSignatures(\n prop: NativeModulePropertyShape,\n funcType: NativeModuleFunctionTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n return getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName)\n .map(sig => `\" ${sig}\\\\n\"`)\n .join('\\n ');\n}\n\nfunction renderProperties(\n properties: ReadonlyArray<NativeModulePropertyShape>,\n aliases: AliasMap,\n tuple: boolean,\n): string {\n // TODO: generate code for constants\n return properties\n .filter(prop => prop.name !== 'getConstants')\n .map((prop, index) => {\n // TODO: prop.optional === true\n // TODO: prop.typeAnnotation.type === 'NullableTypeAnnotation'\n const propAliasName = prop.name;\n const funcType =\n prop.typeAnnotation.type === 'NullableTypeAnnotation'\n ? prop.typeAnnotation.typeAnnotation\n : prop.typeAnnotation;\n\n const traversedArgs = translateSpecArgs(\n funcType.params,\n aliases,\n propAliasName,\n );\n\n const translatedReturnParam = translateSpecReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n propAliasName,\n );\n\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n if (funcType.returnTypeAnnotation.elementType) {\n traversedArgs.push(\n `Promise<${translateSpecReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n propAliasName,\n )}>`,\n );\n } else {\n traversedArgs.push('Promise<::React::JSValue>');\n }\n }\n\n if (tuple) {\n return ` ${\n isMethodSync(funcType) ? 'Sync' : ''\n }Method<${translatedReturnParam}(${traversedArgs.join(\n ', ',\n )}) noexcept>{${index}, L\"${prop.name}\"},`;\n } else {\n return ` REACT_SHOW_METHOD_SPEC_ERRORS(\n ${index},\n \"${prop.name}\",\n ${translatePossibleMethodSignatures(\n prop,\n funcType,\n aliases,\n propAliasName,\n )});`;\n }\n })\n .join('\\n');\n}\n\nexport function generateValidateMethods(\n nativeModule: NativeModuleSchema,\n aliases: AliasMap,\n): [string, string] {\n const properties = nativeModule.spec.properties;\n const traversedProperties = renderProperties(properties, aliases, false);\n const traversedPropertyTuples = renderProperties(properties, aliases, true);\n return [traversedPropertyTuples, traversedProperties];\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/codegen",
|
|
3
|
-
"version": "0.71.
|
|
3
|
+
"version": "0.71.4",
|
|
4
4
|
"description": "Generators for react-native-codegen targeting react-native-windows",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"repository": "https://github.com/microsoft/react-native-windows",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"eslint": "^8.19.0",
|
|
41
41
|
"jest": "^29.2.1",
|
|
42
42
|
"prettier": "^2.4.1",
|
|
43
|
-
"react-native-tscodegen": "0.
|
|
43
|
+
"react-native-tscodegen": "0.72.0",
|
|
44
44
|
"typescript": "^4.9.5"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
9
|
import type {
|
|
10
|
+
NativeModuleEnumDeclaration,
|
|
10
11
|
NativeModuleBaseTypeAnnotation,
|
|
12
|
+
NativeModuleUnionTypeAnnotation,
|
|
11
13
|
Nullable,
|
|
12
14
|
} from 'react-native-tscodegen';
|
|
13
15
|
import {
|
|
@@ -16,10 +18,29 @@ import {
|
|
|
16
18
|
getAnonymousAliasCppName,
|
|
17
19
|
} from './AliasManaging';
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
function translateUnionReturnType(
|
|
22
|
+
type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,
|
|
23
|
+
): string {
|
|
24
|
+
const memberType = type.memberType;
|
|
25
|
+
switch (type.memberType) {
|
|
26
|
+
case 'StringTypeAnnotation':
|
|
27
|
+
return 'std::string';
|
|
28
|
+
case 'NumberTypeAnnotation':
|
|
29
|
+
return 'double';
|
|
30
|
+
case 'ObjectTypeAnnotation':
|
|
31
|
+
return '::React::JSValue';
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Unknown enum/union member type in translateReturnType: ${memberType}`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function translateFieldOrReturnType(
|
|
20
40
|
type: Nullable<NativeModuleBaseTypeAnnotation>,
|
|
21
41
|
aliases: AliasMap,
|
|
22
42
|
baseAliasName: string,
|
|
43
|
+
callerName: 'translateField' | 'translateReturnType',
|
|
23
44
|
): string {
|
|
24
45
|
// avoid: Property 'type' does not exist on type 'never'
|
|
25
46
|
const returnType = type.type;
|
|
@@ -36,10 +57,11 @@ export function translateField(
|
|
|
36
57
|
return 'bool';
|
|
37
58
|
case 'ArrayTypeAnnotation':
|
|
38
59
|
if (type.elementType) {
|
|
39
|
-
return `std::vector<${
|
|
60
|
+
return `std::vector<${translateFieldOrReturnType(
|
|
40
61
|
type.elementType,
|
|
41
62
|
aliases,
|
|
42
63
|
`${baseAliasName}_element`,
|
|
64
|
+
callerName,
|
|
43
65
|
)}>`;
|
|
44
66
|
} else {
|
|
45
67
|
return `::React::JSValueArray`;
|
|
@@ -54,20 +76,35 @@ export function translateField(
|
|
|
54
76
|
// (#6597)
|
|
55
77
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
56
78
|
if (name !== 'RootTag')
|
|
57
|
-
throw new Error(
|
|
58
|
-
`Unknown reserved function: ${name} in translateReturnType`,
|
|
59
|
-
);
|
|
79
|
+
throw new Error(`Unknown reserved function: ${name} in ${callerName}`);
|
|
60
80
|
return 'double';
|
|
61
81
|
}
|
|
62
82
|
case 'TypeAliasTypeAnnotation':
|
|
63
83
|
return getAliasCppName(type.name);
|
|
64
84
|
case 'NullableTypeAnnotation':
|
|
65
|
-
return `std::optional<${
|
|
85
|
+
return `std::optional<${translateFieldOrReturnType(
|
|
66
86
|
type.typeAnnotation,
|
|
67
87
|
aliases,
|
|
68
88
|
baseAliasName,
|
|
89
|
+
callerName,
|
|
69
90
|
)}>`;
|
|
91
|
+
case 'EnumDeclaration':
|
|
92
|
+
case 'UnionTypeAnnotation':
|
|
93
|
+
return translateUnionReturnType(type);
|
|
70
94
|
default:
|
|
71
|
-
throw new Error(`Unhandled type in
|
|
95
|
+
throw new Error(`Unhandled type in ${callerName}: ${returnType}`);
|
|
72
96
|
}
|
|
73
97
|
}
|
|
98
|
+
|
|
99
|
+
export function translateField(
|
|
100
|
+
type: Nullable<NativeModuleBaseTypeAnnotation>,
|
|
101
|
+
aliases: AliasMap,
|
|
102
|
+
baseAliasName: string,
|
|
103
|
+
): string {
|
|
104
|
+
return translateFieldOrReturnType(
|
|
105
|
+
type,
|
|
106
|
+
aliases,
|
|
107
|
+
baseAliasName,
|
|
108
|
+
'translateField',
|
|
109
|
+
);
|
|
110
|
+
}
|
|
@@ -8,7 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
import type {
|
|
10
10
|
NamedShape,
|
|
11
|
+
NativeModuleArrayTypeAnnotation,
|
|
12
|
+
NativeModuleBaseTypeAnnotation,
|
|
13
|
+
NativeModuleEnumDeclaration,
|
|
14
|
+
NativeModuleFunctionTypeAnnotation,
|
|
11
15
|
NativeModuleParamTypeAnnotation,
|
|
16
|
+
NativeModuleUnionTypeAnnotation,
|
|
12
17
|
Nullable,
|
|
13
18
|
} from 'react-native-tscodegen';
|
|
14
19
|
import {
|
|
@@ -34,6 +39,87 @@ function decorateType(type: string, target: ParamTarget): string {
|
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
41
|
|
|
42
|
+
function translateUnionReturnType(
|
|
43
|
+
type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,
|
|
44
|
+
target: ParamTarget,
|
|
45
|
+
): string {
|
|
46
|
+
const memberType = type.memberType;
|
|
47
|
+
switch (type.memberType) {
|
|
48
|
+
case 'StringTypeAnnotation':
|
|
49
|
+
return 'std::string';
|
|
50
|
+
case 'NumberTypeAnnotation':
|
|
51
|
+
return 'double';
|
|
52
|
+
case 'ObjectTypeAnnotation':
|
|
53
|
+
return decorateType('::React::JSValue', target);
|
|
54
|
+
default:
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Unknown enum/union member type in translateReturnType: ${memberType}`,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function translateFunction(
|
|
62
|
+
param: NativeModuleFunctionTypeAnnotation,
|
|
63
|
+
aliases: AliasMap,
|
|
64
|
+
baseAliasName: string,
|
|
65
|
+
target: ParamTarget,
|
|
66
|
+
): string {
|
|
67
|
+
// TODO: type.returnTypeAnnotation
|
|
68
|
+
switch (target) {
|
|
69
|
+
case 'spec':
|
|
70
|
+
return `Callback<${param.params
|
|
71
|
+
.map((p: NativeModuleParamShape) =>
|
|
72
|
+
translateSpecFunctionParam(p, aliases, `${baseAliasName}_${p.name}`),
|
|
73
|
+
)
|
|
74
|
+
.join(', ')}>`;
|
|
75
|
+
case 'template':
|
|
76
|
+
return `std::function<void(${param.params
|
|
77
|
+
.map((p: NativeModuleParamShape) =>
|
|
78
|
+
translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),
|
|
79
|
+
)
|
|
80
|
+
.join(', ')})>`;
|
|
81
|
+
default:
|
|
82
|
+
return `std::function<void(${param.params
|
|
83
|
+
.map((p: NativeModuleParamShape) =>
|
|
84
|
+
translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),
|
|
85
|
+
)
|
|
86
|
+
.join(', ')})> const &`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function translateArray(
|
|
91
|
+
param: NativeModuleArrayTypeAnnotation<
|
|
92
|
+
Nullable<NativeModuleBaseTypeAnnotation>
|
|
93
|
+
>,
|
|
94
|
+
aliases: AliasMap,
|
|
95
|
+
baseAliasName: string,
|
|
96
|
+
target: ParamTarget,
|
|
97
|
+
): string {
|
|
98
|
+
if (param.elementType) {
|
|
99
|
+
switch (target) {
|
|
100
|
+
case 'spec':
|
|
101
|
+
case 'template':
|
|
102
|
+
return `std::vector<${translateNullableParamType(
|
|
103
|
+
param.elementType,
|
|
104
|
+
aliases,
|
|
105
|
+
`${baseAliasName}_element`,
|
|
106
|
+
'template',
|
|
107
|
+
'template',
|
|
108
|
+
)}>`;
|
|
109
|
+
default:
|
|
110
|
+
return `std::vector<${translateNullableParamType(
|
|
111
|
+
param.elementType,
|
|
112
|
+
aliases,
|
|
113
|
+
`${baseAliasName}_element`,
|
|
114
|
+
'template',
|
|
115
|
+
'template',
|
|
116
|
+
)}> const &`;
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
return decorateType('::React::JSValueArray', target);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
37
123
|
function translateParam(
|
|
38
124
|
param: NativeModuleParamTypeAnnotation,
|
|
39
125
|
aliases: AliasMap,
|
|
@@ -53,57 +139,10 @@ function translateParam(
|
|
|
53
139
|
return 'int';
|
|
54
140
|
case 'BooleanTypeAnnotation':
|
|
55
141
|
return 'bool';
|
|
56
|
-
case 'FunctionTypeAnnotation':
|
|
57
|
-
|
|
58
|
-
switch (target) {
|
|
59
|
-
case 'spec':
|
|
60
|
-
return `Callback<${param.params
|
|
61
|
-
.map((p: NativeModuleParamShape) =>
|
|
62
|
-
translateSpecFunctionParam(
|
|
63
|
-
p,
|
|
64
|
-
aliases,
|
|
65
|
-
`${baseAliasName}_${p.name}`,
|
|
66
|
-
),
|
|
67
|
-
)
|
|
68
|
-
.join(', ')}>`;
|
|
69
|
-
case 'template':
|
|
70
|
-
return `std::function<void(${param.params
|
|
71
|
-
.map((p: NativeModuleParamShape) =>
|
|
72
|
-
translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),
|
|
73
|
-
)
|
|
74
|
-
.join(', ')})>`;
|
|
75
|
-
default:
|
|
76
|
-
return `std::function<void(${param.params
|
|
77
|
-
.map((p: NativeModuleParamShape) =>
|
|
78
|
-
translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`),
|
|
79
|
-
)
|
|
80
|
-
.join(', ')})> const &`;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
142
|
+
case 'FunctionTypeAnnotation':
|
|
143
|
+
return translateFunction(param, aliases, baseAliasName, target);
|
|
83
144
|
case 'ArrayTypeAnnotation':
|
|
84
|
-
|
|
85
|
-
switch (target) {
|
|
86
|
-
case 'spec':
|
|
87
|
-
case 'template':
|
|
88
|
-
return `std::vector<${translateNullableParamType(
|
|
89
|
-
param.elementType,
|
|
90
|
-
aliases,
|
|
91
|
-
`${baseAliasName}_element`,
|
|
92
|
-
'template',
|
|
93
|
-
'template',
|
|
94
|
-
)}>`;
|
|
95
|
-
default:
|
|
96
|
-
return `std::vector<${translateNullableParamType(
|
|
97
|
-
param.elementType,
|
|
98
|
-
aliases,
|
|
99
|
-
`${baseAliasName}_element`,
|
|
100
|
-
'template',
|
|
101
|
-
'template',
|
|
102
|
-
)}> const &`;
|
|
103
|
-
}
|
|
104
|
-
} else {
|
|
105
|
-
return decorateType('::React::JSValueArray', target);
|
|
106
|
-
}
|
|
145
|
+
return translateArray(param, aliases, baseAliasName, target);
|
|
107
146
|
case 'GenericObjectTypeAnnotation':
|
|
108
147
|
return decorateType('::React::JSValue', target);
|
|
109
148
|
case 'ObjectTypeAnnotation':
|
|
@@ -122,6 +161,9 @@ function translateParam(
|
|
|
122
161
|
}
|
|
123
162
|
case 'TypeAliasTypeAnnotation':
|
|
124
163
|
return decorateType(getAliasCppName(param.name), target);
|
|
164
|
+
case 'EnumDeclaration':
|
|
165
|
+
case 'UnionTypeAnnotation':
|
|
166
|
+
return translateUnionReturnType(param, target);
|
|
125
167
|
default:
|
|
126
168
|
throw new Error(`Unhandled type in translateParam: ${paramType}`);
|
|
127
169
|
}
|
|
@@ -10,60 +10,18 @@ import type {
|
|
|
10
10
|
NativeModuleReturnTypeAnnotation,
|
|
11
11
|
Nullable,
|
|
12
12
|
} from 'react-native-tscodegen';
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
getAliasCppName,
|
|
16
|
-
getAnonymousAliasCppName,
|
|
17
|
-
} from './AliasManaging';
|
|
13
|
+
import {AliasMap} from './AliasManaging';
|
|
14
|
+
import {translateFieldOrReturnType} from './ObjectTypes';
|
|
18
15
|
|
|
19
16
|
function translateReturnType(
|
|
20
17
|
type: Nullable<NativeModuleReturnTypeAnnotation>,
|
|
21
18
|
aliases: AliasMap,
|
|
22
19
|
baseAliasName: string,
|
|
23
20
|
): string {
|
|
24
|
-
// avoid: Property 'type' does not exist on type 'never'
|
|
25
|
-
const returnType = type.type;
|
|
26
21
|
switch (type.type) {
|
|
27
22
|
case 'VoidTypeAnnotation':
|
|
28
23
|
case 'PromiseTypeAnnotation':
|
|
29
24
|
return 'void';
|
|
30
|
-
case 'StringTypeAnnotation':
|
|
31
|
-
return 'std::string';
|
|
32
|
-
case 'NumberTypeAnnotation':
|
|
33
|
-
case 'FloatTypeAnnotation':
|
|
34
|
-
case 'DoubleTypeAnnotation':
|
|
35
|
-
return 'double';
|
|
36
|
-
case 'Int32TypeAnnotation':
|
|
37
|
-
return 'int';
|
|
38
|
-
case 'BooleanTypeAnnotation':
|
|
39
|
-
return 'bool';
|
|
40
|
-
case 'ArrayTypeAnnotation':
|
|
41
|
-
if (type.elementType) {
|
|
42
|
-
return `std::vector<${translateReturnType(
|
|
43
|
-
type.elementType,
|
|
44
|
-
aliases,
|
|
45
|
-
`${baseAliasName}_element`,
|
|
46
|
-
)}>`;
|
|
47
|
-
} else {
|
|
48
|
-
return '::React::JSValueArray';
|
|
49
|
-
}
|
|
50
|
-
case 'GenericObjectTypeAnnotation':
|
|
51
|
-
return '::React::JSValue';
|
|
52
|
-
case 'ObjectTypeAnnotation':
|
|
53
|
-
return getAnonymousAliasCppName(aliases, baseAliasName, type);
|
|
54
|
-
case 'ReservedTypeAnnotation': {
|
|
55
|
-
// avoid: Property 'name' does not exist on type 'never'
|
|
56
|
-
const name = type.name;
|
|
57
|
-
// (#6597)
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
59
|
-
if (name !== 'RootTag')
|
|
60
|
-
throw new Error(
|
|
61
|
-
`Unknown reserved function: ${name} in translateReturnType`,
|
|
62
|
-
);
|
|
63
|
-
return 'double';
|
|
64
|
-
}
|
|
65
|
-
case 'TypeAliasTypeAnnotation':
|
|
66
|
-
return getAliasCppName(type.name);
|
|
67
25
|
case 'NullableTypeAnnotation':
|
|
68
26
|
return `std::optional<${translateReturnType(
|
|
69
27
|
type.typeAnnotation,
|
|
@@ -71,7 +29,12 @@ function translateReturnType(
|
|
|
71
29
|
baseAliasName,
|
|
72
30
|
)}>`;
|
|
73
31
|
default:
|
|
74
|
-
|
|
32
|
+
return translateFieldOrReturnType(
|
|
33
|
+
type,
|
|
34
|
+
aliases,
|
|
35
|
+
baseAliasName,
|
|
36
|
+
'translateReturnType',
|
|
37
|
+
);
|
|
75
38
|
}
|
|
76
39
|
}
|
|
77
40
|
|
|
@@ -22,10 +22,6 @@ function isMethodSync(funcType: NativeModuleFunctionTypeAnnotation) {
|
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
function isMethodReturnPromise(funcType: NativeModuleFunctionTypeAnnotation) {
|
|
26
|
-
return funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
25
|
function getPossibleMethodSignatures(
|
|
30
26
|
prop: NativeModulePropertyShape,
|
|
31
27
|
funcType: NativeModuleFunctionTypeAnnotation,
|
|
@@ -33,9 +29,18 @@ function getPossibleMethodSignatures(
|
|
|
33
29
|
baseAliasName: string,
|
|
34
30
|
): string[] {
|
|
35
31
|
const args = translateArgs(funcType.params, aliases, baseAliasName);
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
|
|
33
|
+
if (funcType.returnTypeAnnotation.elementType) {
|
|
34
|
+
args.push(
|
|
35
|
+
`::React::ReactPromise<${translateImplReturnType(
|
|
36
|
+
funcType.returnTypeAnnotation.elementType,
|
|
37
|
+
aliases,
|
|
38
|
+
baseAliasName,
|
|
39
|
+
)}> &&result`,
|
|
40
|
+
);
|
|
41
|
+
} else {
|
|
42
|
+
args.push('::React::ReactPromise<::React::JSValue> &&result');
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
// TODO: be much more exhastive on the possible method signatures that can be used..
|
|
@@ -98,9 +103,18 @@ function renderProperties(
|
|
|
98
103
|
propAliasName,
|
|
99
104
|
);
|
|
100
105
|
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
|
|
107
|
+
if (funcType.returnTypeAnnotation.elementType) {
|
|
108
|
+
traversedArgs.push(
|
|
109
|
+
`Promise<${translateSpecReturnType(
|
|
110
|
+
funcType.returnTypeAnnotation.elementType,
|
|
111
|
+
aliases,
|
|
112
|
+
propAliasName,
|
|
113
|
+
)}>`,
|
|
114
|
+
);
|
|
115
|
+
} else {
|
|
116
|
+
traversedArgs.push('Promise<::React::JSValue>');
|
|
117
|
+
}
|
|
104
118
|
}
|
|
105
119
|
|
|
106
120
|
if (tuple) {
|