@react-native-windows/codegen 0.0.0-canary.9 → 0.0.1-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 +726 -15
- package/README.md +1 -1
- package/bin.js +0 -0
- package/lib-commonjs/Cli.d.ts +7 -0
- package/lib-commonjs/Cli.js +92 -0
- package/lib-commonjs/Cli.js.map +1 -0
- package/lib-commonjs/generators/AliasGen.d.ts +12 -0
- package/lib-commonjs/generators/AliasGen.js +88 -0
- package/lib-commonjs/generators/AliasGen.js.map +1 -0
- package/lib-commonjs/generators/AliasManaging.d.ts +15 -0
- package/lib-commonjs/generators/AliasManaging.js +49 -0
- package/lib-commonjs/generators/AliasManaging.js.map +1 -0
- package/lib-commonjs/generators/GenerateNM2.d.ts +15 -0
- package/lib-commonjs/generators/GenerateNM2.js +142 -0
- package/lib-commonjs/generators/GenerateNM2.js.map +1 -0
- package/lib-commonjs/generators/GenerateTypeScript.d.ts +11 -0
- package/lib-commonjs/generators/GenerateTypeScript.js +166 -0
- package/lib-commonjs/generators/GenerateTypeScript.js.map +1 -0
- package/lib-commonjs/generators/ObjectTypes.d.ts +13 -0
- package/lib-commonjs/generators/ObjectTypes.js +75 -0
- package/lib-commonjs/generators/ObjectTypes.js.map +1 -0
- package/lib-commonjs/generators/ParamTypes.d.ts +12 -0
- package/lib-commonjs/generators/ParamTypes.js +137 -0
- package/lib-commonjs/generators/ParamTypes.js.map +1 -0
- package/lib-commonjs/generators/ReturnTypes.d.ts +10 -0
- package/lib-commonjs/generators/ReturnTypes.js +29 -0
- package/lib-commonjs/generators/ReturnTypes.js.map +1 -0
- package/lib-commonjs/generators/ValidateConstants.d.ts +8 -0
- package/lib-commonjs/generators/ValidateConstants.js +38 -0
- package/lib-commonjs/generators/ValidateConstants.js.map +1 -0
- package/lib-commonjs/generators/ValidateMethods.d.ts +9 -0
- package/lib-commonjs/generators/ValidateMethods.js +75 -0
- package/lib-commonjs/generators/ValidateMethods.js.map +1 -0
- package/lib-commonjs/index.d.ts +37 -0
- package/lib-commonjs/index.js +224 -0
- package/lib-commonjs/index.js.map +1 -0
- package/package.json +37 -20
- package/src/Cli.ts +57 -190
- package/src/generators/AliasGen.ts +149 -0
- package/src/generators/AliasManaging.ts +75 -0
- package/src/generators/GenerateNM2.ts +138 -295
- package/src/generators/GenerateTypeScript.ts +247 -0
- package/src/generators/ObjectTypes.ts +130 -0
- package/src/generators/ParamTypes.ts +298 -0
- package/src/generators/ReturnTypes.ts +70 -0
- package/src/generators/ValidateConstants.ts +50 -0
- package/src/generators/ValidateMethods.ts +177 -0
- package/src/index.ts +393 -0
- package/.eslintrc.js +0 -4
- package/.vscode/launch.json +0 -23
- package/CHANGELOG.json +0 -583
- package/jest.config.js +0 -1
- package/tsconfig.json +0 -5
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
'use strict';
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateTypeScript = exports.getOptionalTurboModule = exports.setOptionalTurboModule = void 0;
|
|
9
|
+
function setOptionalTurboModule(schema, optional) {
|
|
10
|
+
const cs = schema;
|
|
11
|
+
cs.optionalTurboModule = optional;
|
|
12
|
+
}
|
|
13
|
+
exports.setOptionalTurboModule = setOptionalTurboModule;
|
|
14
|
+
function getOptionalTurboModule(schema) {
|
|
15
|
+
var _a;
|
|
16
|
+
return (_a = schema.optionalTurboModule) !== null && _a !== void 0 ? _a : false;
|
|
17
|
+
}
|
|
18
|
+
exports.getOptionalTurboModule = getOptionalTurboModule;
|
|
19
|
+
const moduleTemplate = `
|
|
20
|
+
/*
|
|
21
|
+
* This file is auto-generated from a NativeModule spec file in js.
|
|
22
|
+
*
|
|
23
|
+
* This is a TypeScript turbo module definition file.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import {TurboModule, TurboModuleRegistry} from 'react-native';
|
|
27
|
+
'use strict';
|
|
28
|
+
::_MODULE_ALIASED_STRUCTS_::
|
|
29
|
+
export interface Spec extends TurboModule {
|
|
30
|
+
::_MODULE_MEMBERS_::
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export default TurboModuleRegistry.::_MODULE_GETTER_::<Spec>('::_MODULE_NAME_::');
|
|
34
|
+
`;
|
|
35
|
+
function optionalSign(obj) {
|
|
36
|
+
return obj.optional ? '?' : '';
|
|
37
|
+
}
|
|
38
|
+
function translateType(type) {
|
|
39
|
+
// avoid: Property 'type' does not exist on type 'never'
|
|
40
|
+
const returnType = type.type;
|
|
41
|
+
switch (type.type) {
|
|
42
|
+
case 'StringTypeAnnotation':
|
|
43
|
+
return 'string';
|
|
44
|
+
case 'NumberTypeAnnotation':
|
|
45
|
+
case 'FloatTypeAnnotation':
|
|
46
|
+
case 'DoubleTypeAnnotation':
|
|
47
|
+
case 'Int32TypeAnnotation':
|
|
48
|
+
return 'number';
|
|
49
|
+
case 'BooleanTypeAnnotation':
|
|
50
|
+
return 'boolean';
|
|
51
|
+
case 'ArrayTypeAnnotation':
|
|
52
|
+
if (type.elementType) {
|
|
53
|
+
return `${translateType(type.elementType)}[]`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return `Array`;
|
|
57
|
+
}
|
|
58
|
+
case 'GenericObjectTypeAnnotation':
|
|
59
|
+
return 'object';
|
|
60
|
+
case 'ObjectTypeAnnotation':
|
|
61
|
+
return `{${type.properties
|
|
62
|
+
.map((prop) => {
|
|
63
|
+
return `${prop.name}${optionalSign(prop)}: ${translateType(prop.typeAnnotation)}`;
|
|
64
|
+
})
|
|
65
|
+
.join(', ')}}`;
|
|
66
|
+
case 'ReservedTypeAnnotation': {
|
|
67
|
+
// avoid: Property 'name' does not exist on type 'never'
|
|
68
|
+
const name = type.name;
|
|
69
|
+
// (#6597)
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
71
|
+
if (name !== 'RootTag')
|
|
72
|
+
throw new Error(`Unknown reserved function: ${name} in translateReturnType`);
|
|
73
|
+
return 'number';
|
|
74
|
+
}
|
|
75
|
+
case 'TypeAliasTypeAnnotation':
|
|
76
|
+
return type.name;
|
|
77
|
+
case 'NullableTypeAnnotation':
|
|
78
|
+
return `(${translateType(type.typeAnnotation)} | null | undefined)`;
|
|
79
|
+
case 'VoidTypeAnnotation':
|
|
80
|
+
return `void`;
|
|
81
|
+
case 'PromiseTypeAnnotation':
|
|
82
|
+
return `Promise`;
|
|
83
|
+
case `FunctionTypeAnnotation`:
|
|
84
|
+
return `((${type.params
|
|
85
|
+
.map((param) => {
|
|
86
|
+
return `${param.name}${optionalSign(param)}: ${translateType(param.typeAnnotation)}`;
|
|
87
|
+
})
|
|
88
|
+
.join(', ')}) => ${translateType(type.returnTypeAnnotation)})`;
|
|
89
|
+
default:
|
|
90
|
+
throw new Error(`Unhandled type in translateReturnType: ${returnType}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function translateAlias(name, type) {
|
|
94
|
+
return `
|
|
95
|
+
export interface ${name} {
|
|
96
|
+
${type.properties
|
|
97
|
+
.map((prop) => {
|
|
98
|
+
return ` ${prop.name}${optionalSign(prop)}: ${translateType(prop.typeAnnotation)};`;
|
|
99
|
+
})
|
|
100
|
+
.join('\n')}
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
function tryGetConstantType(nativeModule) {
|
|
105
|
+
const candidates = nativeModule.spec.properties.filter(prop => prop.name === 'getConstants');
|
|
106
|
+
if (candidates.length === 0) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
const getConstant = candidates[0];
|
|
110
|
+
const funcType = getConstant.typeAnnotation.type === 'NullableTypeAnnotation'
|
|
111
|
+
? getConstant.typeAnnotation.typeAnnotation
|
|
112
|
+
: getConstant.typeAnnotation;
|
|
113
|
+
if (funcType.params.length > 0 ||
|
|
114
|
+
funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation') {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const constantType = funcType.returnTypeAnnotation;
|
|
118
|
+
if (constantType.properties.length === 0) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return constantType;
|
|
122
|
+
}
|
|
123
|
+
function translateMethod(func) {
|
|
124
|
+
const funcType = func.typeAnnotation.type === 'NullableTypeAnnotation'
|
|
125
|
+
? func.typeAnnotation.typeAnnotation
|
|
126
|
+
: func.typeAnnotation;
|
|
127
|
+
return `
|
|
128
|
+
${func.name}(${funcType.params
|
|
129
|
+
.map((param) => {
|
|
130
|
+
return `${param.name}${optionalSign(param)}: ${translateType(param.typeAnnotation)}`;
|
|
131
|
+
})
|
|
132
|
+
.join(', ')})${optionalSign(func)}: ${translateType(funcType.returnTypeAnnotation)}${funcType.returnTypeAnnotation.type === 'ObjectTypeAnnotation' ? '' : ';'}`;
|
|
133
|
+
}
|
|
134
|
+
function generateTypeScript(_libraryName, schema, _moduleSpecName) {
|
|
135
|
+
const files = new Map();
|
|
136
|
+
for (const moduleName of Object.keys(schema.modules)) {
|
|
137
|
+
const nativeModule = schema.modules[moduleName];
|
|
138
|
+
// from 0.65 facebook's react-native-codegen
|
|
139
|
+
// the module name has the Native prefix comparing to 0.63
|
|
140
|
+
// when reading files we provided
|
|
141
|
+
const nativePrefix = 'Native';
|
|
142
|
+
const preferredModuleName = moduleName.startsWith(nativePrefix)
|
|
143
|
+
? moduleName.substr(nativePrefix.length)
|
|
144
|
+
: moduleName;
|
|
145
|
+
if (nativeModule.type === 'NativeModule') {
|
|
146
|
+
console.log(`Generating ${preferredModuleName}Spec.g.ts`);
|
|
147
|
+
const aliasCode = Object.keys(nativeModule.aliasMap)
|
|
148
|
+
.map(name => translateAlias(name, nativeModule.aliasMap[name]))
|
|
149
|
+
.join('');
|
|
150
|
+
const constantType = tryGetConstantType(nativeModule);
|
|
151
|
+
const constantCode = constantType === undefined
|
|
152
|
+
? ''
|
|
153
|
+
: ` getConstants(): ${translateType(constantType)}`;
|
|
154
|
+
const methods = nativeModule.spec.properties.filter(prop => prop.name !== 'getConstants');
|
|
155
|
+
const membersCode = methods.map(translateMethod).join('');
|
|
156
|
+
files.set(`${preferredModuleName}Spec.g.ts`, moduleTemplate
|
|
157
|
+
.replace(/::_MODULE_ALIASED_STRUCTS_::/g, aliasCode)
|
|
158
|
+
.replace(/::_MODULE_MEMBERS_::/g, constantCode + membersCode)
|
|
159
|
+
.replace(/::_MODULE_NAME_::/g, preferredModuleName)
|
|
160
|
+
.replace(/::_MODULE_GETTER_::/g, getOptionalTurboModule(nativeModule) ? 'get' : 'getEnforcing'));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return files;
|
|
164
|
+
}
|
|
165
|
+
exports.generateTypeScript = generateTypeScript;
|
|
166
|
+
//# sourceMappingURL=GenerateTypeScript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerateTypeScript.js","sourceRoot":"","sources":["../../src/generators/GenerateTypeScript.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 NativeModuleBaseTypeAnnotation,\n NativeModuleFunctionTypeAnnotation,\n NativeModuleObjectTypeAnnotation,\n NativeModuleParamTypeAnnotation,\n NativeModuleReturnTypeAnnotation,\n NativeModuleSchema,\n Nullable,\n SchemaType,\n} from '@react-native/codegen/lib/CodegenSchema';\n\ninterface CodegenNativeModuleSchema extends NativeModuleSchema {\n optionalTurboModule?: boolean;\n}\n\nexport function setOptionalTurboModule(\n schema: NativeModuleSchema,\n optional: boolean,\n): void {\n const cs = <CodegenNativeModuleSchema>schema;\n cs.optionalTurboModule = optional;\n}\n\nexport function getOptionalTurboModule(schema: NativeModuleSchema): boolean {\n return (<CodegenNativeModuleSchema>schema).optionalTurboModule ?? false;\n}\n\ntype ObjectProp = NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>;\ntype FunctionParam = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;\ntype FunctionDecl = NamedShape<Nullable<NativeModuleFunctionTypeAnnotation>>;\ntype FilesOutput = Map<string, string>;\n\nconst moduleTemplate = `\n/*\n * This file is auto-generated from a NativeModule spec file in js.\n *\n * This is a TypeScript turbo module definition file.\n */\n\nimport {TurboModule, TurboModuleRegistry} from 'react-native';\n'use strict';\n::_MODULE_ALIASED_STRUCTS_::\nexport interface Spec extends TurboModule {\n::_MODULE_MEMBERS_::\n}\n\nexport default TurboModuleRegistry.::_MODULE_GETTER_::<Spec>('::_MODULE_NAME_::');\n`;\n\nfunction optionalSign<T>(obj: NamedShape<T>): string {\n return obj.optional ? '?' : '';\n}\n\nfunction translateType(\n type: Nullable<\n | NativeModuleBaseTypeAnnotation\n | NativeModuleParamTypeAnnotation\n | NativeModuleReturnTypeAnnotation\n >,\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 'string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n case 'Int32TypeAnnotation':\n return 'number';\n case 'BooleanTypeAnnotation':\n return 'boolean';\n case 'ArrayTypeAnnotation':\n if (type.elementType) {\n return `${translateType(type.elementType)}[]`;\n } else {\n return `Array`;\n }\n case 'GenericObjectTypeAnnotation':\n return 'object';\n case 'ObjectTypeAnnotation':\n return `{${type.properties\n .map((prop: ObjectProp) => {\n return `${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )}`;\n })\n .join(', ')}}`;\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(\n `Unknown reserved function: ${name} in translateReturnType`,\n );\n return 'number';\n }\n case 'TypeAliasTypeAnnotation':\n return type.name;\n case 'NullableTypeAnnotation':\n return `(${translateType(type.typeAnnotation)} | null | undefined)`;\n case 'VoidTypeAnnotation':\n return `void`;\n case 'PromiseTypeAnnotation':\n return `Promise`;\n case `FunctionTypeAnnotation`:\n return `((${type.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')}) => ${translateType(type.returnTypeAnnotation)})`;\n default:\n throw new Error(`Unhandled type in translateReturnType: ${returnType}`);\n }\n}\n\nfunction translateAlias(\n name: string,\n type: NativeModuleObjectTypeAnnotation,\n): string {\n return `\nexport interface ${name} {\n${type.properties\n .map((prop: ObjectProp) => {\n return ` ${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )};`;\n })\n .join('\\n')}\n}\n`;\n}\n\nfunction tryGetConstantType(\n nativeModule: NativeModuleSchema,\n): NativeModuleObjectTypeAnnotation | undefined {\n const candidates = nativeModule.spec.properties.filter(\n prop => prop.name === 'getConstants',\n );\n if (candidates.length === 0) {\n return undefined;\n }\n\n const getConstant = candidates[0];\n const funcType =\n getConstant.typeAnnotation.type === 'NullableTypeAnnotation'\n ? getConstant.typeAnnotation.typeAnnotation\n : getConstant.typeAnnotation;\n if (\n funcType.params.length > 0 ||\n funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation'\n ) {\n return undefined;\n }\n\n const constantType = funcType.returnTypeAnnotation;\n if (constantType.properties.length === 0) {\n return undefined;\n }\n\n return constantType;\n}\n\nfunction translateMethod(func: FunctionDecl): string {\n const funcType =\n func.typeAnnotation.type === 'NullableTypeAnnotation'\n ? func.typeAnnotation.typeAnnotation\n : func.typeAnnotation;\n\n return `\n ${func.name}(${funcType.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')})${optionalSign(func)}: ${translateType(\n funcType.returnTypeAnnotation,\n )}${\n funcType.returnTypeAnnotation.type === 'ObjectTypeAnnotation' ? '' : ';'\n }`;\n}\n\nexport function generateTypeScript(\n _libraryName: string,\n schema: SchemaType,\n _moduleSpecName: string,\n): FilesOutput {\n const files = new Map<string, string>();\n\n for (const moduleName of Object.keys(schema.modules)) {\n const nativeModule = schema.modules[moduleName];\n // from 0.65 facebook's react-native-codegen\n // the module name has the Native prefix comparing to 0.63\n // when reading files we provided\n const nativePrefix = 'Native';\n const preferredModuleName = moduleName.startsWith(nativePrefix)\n ? moduleName.substr(nativePrefix.length)\n : moduleName;\n\n if (nativeModule.type === 'NativeModule') {\n console.log(`Generating ${preferredModuleName}Spec.g.ts`);\n\n const aliasCode = Object.keys(nativeModule.aliasMap)\n .map(name => translateAlias(name, nativeModule.aliasMap[name]))\n .join('');\n\n const constantType = tryGetConstantType(nativeModule);\n const constantCode =\n constantType === undefined\n ? ''\n : ` getConstants(): ${translateType(constantType)}`;\n\n const methods = nativeModule.spec.properties.filter(\n prop => prop.name !== 'getConstants',\n );\n const membersCode = methods.map(translateMethod).join('');\n\n files.set(\n `${preferredModuleName}Spec.g.ts`,\n moduleTemplate\n .replace(/::_MODULE_ALIASED_STRUCTS_::/g, aliasCode)\n .replace(/::_MODULE_MEMBERS_::/g, constantCode + membersCode)\n .replace(/::_MODULE_NAME_::/g, preferredModuleName)\n .replace(\n /::_MODULE_GETTER_::/g,\n getOptionalTurboModule(nativeModule) ? 'get' : 'getEnforcing',\n ),\n );\n }\n }\n\n return files;\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import type { NativeModuleBaseTypeAnnotation, NativeModuleStringTypeAnnotation, NativeModuleFunctionTypeAnnotation, Nullable } from '@react-native/codegen/lib/CodegenSchema';
|
|
7
|
+
import { AliasMap } from './AliasManaging';
|
|
8
|
+
export type CppStringTypes = 'std::string' | 'std::wstring';
|
|
9
|
+
export interface CppCodegenOptions {
|
|
10
|
+
cppStringType: CppStringTypes;
|
|
11
|
+
}
|
|
12
|
+
export declare function translateFieldOrReturnType(type: Nullable<NativeModuleBaseTypeAnnotation | NativeModuleStringTypeAnnotation | NativeModuleFunctionTypeAnnotation>, aliases: AliasMap, baseAliasName: string, callerName: 'translateField' | 'translateReturnType', options: CppCodegenOptions): string;
|
|
13
|
+
export declare function translateField(type: Nullable<NativeModuleBaseTypeAnnotation>, aliases: AliasMap, baseAliasName: string, options: CppCodegenOptions): string;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
'use strict';
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.translateField = exports.translateFieldOrReturnType = void 0;
|
|
9
|
+
const AliasManaging_1 = require("./AliasManaging");
|
|
10
|
+
function translateUnionReturnType(type, options) {
|
|
11
|
+
const memberType = type.memberType;
|
|
12
|
+
switch (type.memberType) {
|
|
13
|
+
case 'StringTypeAnnotation':
|
|
14
|
+
return options.cppStringType;
|
|
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, options) {
|
|
24
|
+
// avoid: Property 'type' does not exist on type 'never'
|
|
25
|
+
const returnType = type.type;
|
|
26
|
+
switch (type.type) {
|
|
27
|
+
case 'StringTypeAnnotation':
|
|
28
|
+
return options.cppStringType;
|
|
29
|
+
case 'NumberTypeAnnotation':
|
|
30
|
+
case 'FloatTypeAnnotation':
|
|
31
|
+
case 'DoubleTypeAnnotation':
|
|
32
|
+
return 'double';
|
|
33
|
+
case 'Int32TypeAnnotation':
|
|
34
|
+
return 'int';
|
|
35
|
+
case 'BooleanTypeAnnotation':
|
|
36
|
+
return 'bool';
|
|
37
|
+
case 'ArrayTypeAnnotation':
|
|
38
|
+
if (type.elementType) {
|
|
39
|
+
return `std::vector<${translateFieldOrReturnType(type.elementType, aliases, `${baseAliasName}_element`, callerName, options)}>`;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return `::React::JSValueArray`;
|
|
43
|
+
}
|
|
44
|
+
case 'GenericObjectTypeAnnotation':
|
|
45
|
+
return '::React::JSValue';
|
|
46
|
+
case 'ObjectTypeAnnotation':
|
|
47
|
+
return (0, AliasManaging_1.getAnonymousAliasCppName)(aliases, baseAliasName, type);
|
|
48
|
+
case 'ReservedTypeAnnotation': {
|
|
49
|
+
// avoid: Property 'name' does not exist on type 'never'
|
|
50
|
+
const name = type.name;
|
|
51
|
+
// (#6597)
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
53
|
+
if (name !== 'RootTag')
|
|
54
|
+
throw new Error(`Unknown reserved function: ${name} in ${callerName}`);
|
|
55
|
+
return 'double';
|
|
56
|
+
}
|
|
57
|
+
case 'TypeAliasTypeAnnotation':
|
|
58
|
+
return (0, AliasManaging_1.getAliasCppName)(type.name);
|
|
59
|
+
case 'NullableTypeAnnotation':
|
|
60
|
+
return `std::optional<${translateFieldOrReturnType(type.typeAnnotation, aliases, baseAliasName, callerName, options)}>`;
|
|
61
|
+
case 'MixedTypeAnnotation':
|
|
62
|
+
return '';
|
|
63
|
+
case 'EnumDeclaration':
|
|
64
|
+
case 'UnionTypeAnnotation':
|
|
65
|
+
return translateUnionReturnType(type, options);
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unhandled type in ${callerName}: ${returnType}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.translateFieldOrReturnType = translateFieldOrReturnType;
|
|
71
|
+
function translateField(type, aliases, baseAliasName, options) {
|
|
72
|
+
return translateFieldOrReturnType(type, aliases, baseAliasName, 'translateField', options);
|
|
73
|
+
}
|
|
74
|
+
exports.translateField = translateField;
|
|
75
|
+
//# sourceMappingURL=ObjectTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectTypes.js","sourceRoot":"","sources":["../../src/generators/ObjectTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAUb,mDAIyB;AAQzB,SAAS,wBAAwB,CAC/B,IAAmE,EACnE,OAA0B;IAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,QAAQ,IAAI,CAAC,UAAU,EAAE;QACvB,KAAK,sBAAsB;YACzB,OAAO,OAAO,CAAC,aAAa,CAAC;QAC/B,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,IAIC,EACD,OAAiB,EACjB,aAAqB,EACrB,UAAoD,EACpD,OAA0B;IAE1B,wDAAwD;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,sBAAsB;YACzB,OAAO,OAAO,CAAC,aAAa,CAAC;QAC/B,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,EACV,OAAO,CACR,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,EACV,OAAO,CACR,GAAG,CAAC;QACP,KAAK,qBAAqB;YACxB,OAAO,EAAE,CAAC;QACZ,KAAK,iBAAiB,CAAC;QACvB,KAAK,qBAAqB;YACxB,OAAO,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,KAAK,UAAU,EAAE,CAAC,CAAC;KACrE;AACH,CAAC;AAnED,gEAmEC;AAED,SAAgB,cAAc,CAC5B,IAA8C,EAC9C,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,OAAO,0BAA0B,CAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,OAAO,CACR,CAAC;AACJ,CAAC;AAbD,wCAaC","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 NativeModuleStringTypeAnnotation,\n NativeModuleFunctionTypeAnnotation,\n Nullable,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {\n AliasMap,\n getAliasCppName,\n getAnonymousAliasCppName,\n} from './AliasManaging';\n\nexport type CppStringTypes = 'std::string' | 'std::wstring';\n\nexport interface CppCodegenOptions {\n cppStringType: CppStringTypes;\n}\n\nfunction translateUnionReturnType(\n type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,\n options: CppCodegenOptions,\n): string {\n const memberType = type.memberType;\n switch (type.memberType) {\n case 'StringTypeAnnotation':\n return options.cppStringType;\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<\n | NativeModuleBaseTypeAnnotation\n | NativeModuleStringTypeAnnotation\n | NativeModuleFunctionTypeAnnotation\n >,\n aliases: AliasMap,\n baseAliasName: string,\n callerName: 'translateField' | 'translateReturnType',\n options: CppCodegenOptions,\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 options.cppStringType;\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 options,\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 options,\n )}>`;\n case 'MixedTypeAnnotation':\n return '';\n case 'EnumDeclaration':\n case 'UnionTypeAnnotation':\n return translateUnionReturnType(type, options);\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 options: CppCodegenOptions,\n): string {\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateField',\n options,\n );\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import type { NamedShape, NativeModuleParamTypeAnnotation, Nullable } from '@react-native/codegen/lib/CodegenSchema';
|
|
7
|
+
import { AliasMap } from './AliasManaging';
|
|
8
|
+
import type { CppCodegenOptions } from './ObjectTypes';
|
|
9
|
+
type NativeModuleParamShape = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;
|
|
10
|
+
export declare function translateSpecArgs(params: ReadonlyArray<NativeModuleParamShape>, aliases: AliasMap, baseAliasName: string, options: CppCodegenOptions): string[];
|
|
11
|
+
export declare function translateArgs(params: ReadonlyArray<NativeModuleParamShape>, aliases: AliasMap, baseAliasName: string, options: CppCodegenOptions): string[];
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
'use strict';
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.translateArgs = exports.translateSpecArgs = void 0;
|
|
9
|
+
const AliasManaging_1 = require("./AliasManaging");
|
|
10
|
+
function decorateType(type, target) {
|
|
11
|
+
switch (target) {
|
|
12
|
+
case 'method-arg':
|
|
13
|
+
return `${type} &&`;
|
|
14
|
+
case 'callback-arg':
|
|
15
|
+
return `${type} const &`;
|
|
16
|
+
default:
|
|
17
|
+
return type;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function translateUnionReturnType(type, target, options) {
|
|
21
|
+
const memberType = type.memberType;
|
|
22
|
+
switch (type.memberType) {
|
|
23
|
+
case 'StringTypeAnnotation':
|
|
24
|
+
return options.cppStringType;
|
|
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, options) {
|
|
34
|
+
// TODO: type.returnTypeAnnotation
|
|
35
|
+
switch (target) {
|
|
36
|
+
case 'spec':
|
|
37
|
+
return `Callback<${param.params
|
|
38
|
+
.map((p) => translateSpecFunctionParam(p, aliases, `${baseAliasName}_${p.name}`, options))
|
|
39
|
+
.join(', ')}>`;
|
|
40
|
+
case 'template':
|
|
41
|
+
return `std::function<void(${param.params
|
|
42
|
+
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`, options))
|
|
43
|
+
.join(', ')})>`;
|
|
44
|
+
default:
|
|
45
|
+
return `std::function<void(${param.params
|
|
46
|
+
.map((p) => translateCallbackParam(p, aliases, `${baseAliasName}_${p.name}`, options))
|
|
47
|
+
.join(', ')})> const &`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function translateArray(param, aliases, baseAliasName, target, options) {
|
|
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', options)}>`;
|
|
56
|
+
default:
|
|
57
|
+
return `std::vector<${translateNullableParamType(param.elementType, aliases, `${baseAliasName}_element`, 'template', 'template', options)}> const &`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return decorateType('::React::JSValueArray', target);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function translateParam(param, aliases, baseAliasName, target, options) {
|
|
65
|
+
// avoid: Property 'type' does not exist on type 'never'
|
|
66
|
+
const paramType = param.type;
|
|
67
|
+
switch (param.type) {
|
|
68
|
+
case 'StringTypeAnnotation':
|
|
69
|
+
return options.cppStringType;
|
|
70
|
+
case 'NumberTypeAnnotation':
|
|
71
|
+
case 'FloatTypeAnnotation':
|
|
72
|
+
case 'DoubleTypeAnnotation':
|
|
73
|
+
return 'double';
|
|
74
|
+
case 'Int32TypeAnnotation':
|
|
75
|
+
return 'int';
|
|
76
|
+
case 'BooleanTypeAnnotation':
|
|
77
|
+
return 'bool';
|
|
78
|
+
case 'FunctionTypeAnnotation':
|
|
79
|
+
return translateFunction(param, aliases, baseAliasName, target, options);
|
|
80
|
+
case 'ArrayTypeAnnotation':
|
|
81
|
+
return translateArray(param, aliases, baseAliasName, target, options);
|
|
82
|
+
case 'GenericObjectTypeAnnotation':
|
|
83
|
+
return decorateType('::React::JSValue', target);
|
|
84
|
+
case 'ObjectTypeAnnotation':
|
|
85
|
+
return decorateType((0, AliasManaging_1.getAnonymousAliasCppName)(aliases, baseAliasName, param), target);
|
|
86
|
+
case 'ReservedTypeAnnotation': {
|
|
87
|
+
// avoid: Property 'name' does not exist on type 'never'
|
|
88
|
+
const name = param.name;
|
|
89
|
+
// (#6597)
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
91
|
+
if (name !== 'RootTag')
|
|
92
|
+
throw new Error(`Unknown reserved function: ${name} in translateParam`);
|
|
93
|
+
return 'double';
|
|
94
|
+
}
|
|
95
|
+
case 'TypeAliasTypeAnnotation':
|
|
96
|
+
return decorateType((0, AliasManaging_1.getAliasCppName)(param.name), target);
|
|
97
|
+
case 'MixedTypeAnnotation':
|
|
98
|
+
return '';
|
|
99
|
+
case 'EnumDeclaration':
|
|
100
|
+
case 'UnionTypeAnnotation':
|
|
101
|
+
return translateUnionReturnType(param, target, options);
|
|
102
|
+
default:
|
|
103
|
+
throw new Error(`Unhandled type in translateParam: ${paramType}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function translateNullableParamType(paramType, aliases, baseAliasName, nullableTarget, target, options) {
|
|
107
|
+
switch (paramType.type) {
|
|
108
|
+
case 'NullableTypeAnnotation':
|
|
109
|
+
return `std::optional<${translateParam(paramType.typeAnnotation, aliases, baseAliasName, nullableTarget, options)}>`;
|
|
110
|
+
default:
|
|
111
|
+
return translateParam(paramType, aliases, baseAliasName, target, options);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function translateSpecFunctionParam(param, aliases, baseAliasName, options) {
|
|
115
|
+
return translateNullableParamType(param.typeAnnotation, aliases, baseAliasName, 'spec', 'spec', options);
|
|
116
|
+
}
|
|
117
|
+
function translateCallbackParam(param, aliases, baseAliasName, options) {
|
|
118
|
+
return translateNullableParamType(param.typeAnnotation, aliases, baseAliasName, 'template', 'callback-arg', options);
|
|
119
|
+
}
|
|
120
|
+
function translateFunctionParam(param, aliases, baseAliasName, options) {
|
|
121
|
+
return translateNullableParamType(param.typeAnnotation, aliases, baseAliasName, 'template', 'method-arg', options);
|
|
122
|
+
}
|
|
123
|
+
function translateSpecArgs(params, aliases, baseAliasName, options) {
|
|
124
|
+
return params.map(param => {
|
|
125
|
+
const translatedParam = translateSpecFunctionParam(param, aliases, `${baseAliasName}_${param.name}`, options);
|
|
126
|
+
return `${translatedParam}`;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
exports.translateSpecArgs = translateSpecArgs;
|
|
130
|
+
function translateArgs(params, aliases, baseAliasName, options) {
|
|
131
|
+
return params.map(param => {
|
|
132
|
+
const translatedParam = translateFunctionParam(param, aliases, `${baseAliasName}_${param.name}`, options);
|
|
133
|
+
return `${translatedParam} ${param.name}`;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
exports.translateArgs = translateArgs;
|
|
137
|
+
//# sourceMappingURL=ParamTypes.js.map
|
|
@@ -0,0 +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 NativeModuleArrayTypeAnnotation,\n NativeModuleBaseTypeAnnotation,\n NativeModuleEnumDeclaration,\n NativeModuleFunctionTypeAnnotation,\n NativeModuleParamTypeAnnotation,\n NativeModuleUnionTypeAnnotation,\n Nullable,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {\n AliasMap,\n getAliasCppName,\n getAnonymousAliasCppName,\n} from './AliasManaging';\nimport type {CppCodegenOptions} from './ObjectTypes';\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 options: CppCodegenOptions,\n): string {\n const memberType = type.memberType;\n switch (type.memberType) {\n case 'StringTypeAnnotation':\n return options.cppStringType;\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 options: CppCodegenOptions,\n): string {\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 options,\n ),\n )\n .join(', ')}>`;\n case 'template':\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(\n p,\n aliases,\n `${baseAliasName}_${p.name}`,\n options,\n ),\n )\n .join(', ')})>`;\n default:\n return `std::function<void(${param.params\n .map((p: NativeModuleParamShape) =>\n translateCallbackParam(\n p,\n aliases,\n `${baseAliasName}_${p.name}`,\n options,\n ),\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 options: CppCodegenOptions,\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 options,\n )}>`;\n default:\n return `std::vector<${translateNullableParamType(\n param.elementType,\n aliases,\n `${baseAliasName}_element`,\n 'template',\n 'template',\n options,\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 options: CppCodegenOptions,\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 options.cppStringType;\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, options);\n case 'ArrayTypeAnnotation':\n return translateArray(param, aliases, baseAliasName, target, options);\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 'MixedTypeAnnotation':\n return '';\n case 'EnumDeclaration':\n case 'UnionTypeAnnotation':\n return translateUnionReturnType(param, target, options);\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 options: CppCodegenOptions,\n): string {\n switch (paramType.type) {\n case 'NullableTypeAnnotation':\n return `std::optional<${translateParam(\n paramType.typeAnnotation,\n aliases,\n baseAliasName,\n nullableTarget,\n options,\n )}>`;\n default:\n return translateParam(paramType, aliases, baseAliasName, target, options);\n }\n}\n\nfunction translateSpecFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'spec',\n 'spec',\n options,\n );\n}\n\nfunction translateCallbackParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'callback-arg',\n options,\n );\n}\n\nfunction translateFunctionParam(\n param: NativeModuleParamShape,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string {\n return translateNullableParamType(\n param.typeAnnotation,\n aliases,\n baseAliasName,\n 'template',\n 'method-arg',\n options,\n );\n}\n\nexport function translateSpecArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return params.map(param => {\n const translatedParam = translateSpecFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n options,\n );\n return `${translatedParam}`;\n });\n}\n\nexport function translateArgs(\n params: ReadonlyArray<NativeModuleParamShape>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return params.map(param => {\n const translatedParam = translateFunctionParam(\n param,\n aliases,\n `${baseAliasName}_${param.name}`,\n options,\n );\n return `${translatedParam} ${param.name}`;\n });\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import type { NativeModuleReturnTypeAnnotation, Nullable } from '@react-native/codegen/lib/CodegenSchema';
|
|
7
|
+
import { AliasMap } from './AliasManaging';
|
|
8
|
+
import { CppCodegenOptions } from './ObjectTypes';
|
|
9
|
+
export declare function translateSpecReturnType(type: Nullable<NativeModuleReturnTypeAnnotation>, aliases: AliasMap, baseAliasName: string, options: CppCodegenOptions): string;
|
|
10
|
+
export declare function translateImplReturnType(type: Nullable<NativeModuleReturnTypeAnnotation>, aliases: AliasMap, baseAliasName: string, options: CppCodegenOptions): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
'use strict';
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.translateImplReturnType = exports.translateSpecReturnType = void 0;
|
|
9
|
+
const ObjectTypes_1 = require("./ObjectTypes");
|
|
10
|
+
function translateReturnType(type, aliases, baseAliasName, options) {
|
|
11
|
+
switch (type.type) {
|
|
12
|
+
case 'VoidTypeAnnotation':
|
|
13
|
+
case 'PromiseTypeAnnotation':
|
|
14
|
+
return 'void';
|
|
15
|
+
case 'NullableTypeAnnotation':
|
|
16
|
+
return `std::optional<${translateReturnType(type.typeAnnotation, aliases, baseAliasName, options)}>`;
|
|
17
|
+
default:
|
|
18
|
+
return (0, ObjectTypes_1.translateFieldOrReturnType)(type, aliases, baseAliasName, 'translateReturnType', options);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function translateSpecReturnType(type, aliases, baseAliasName, options) {
|
|
22
|
+
return translateReturnType(type, aliases, `${baseAliasName}_returnType`, options);
|
|
23
|
+
}
|
|
24
|
+
exports.translateSpecReturnType = translateSpecReturnType;
|
|
25
|
+
function translateImplReturnType(type, aliases, baseAliasName, options) {
|
|
26
|
+
return translateReturnType(type, aliases, `${baseAliasName}_returnType`, options);
|
|
27
|
+
}
|
|
28
|
+
exports.translateImplReturnType = translateImplReturnType;
|
|
29
|
+
//# sourceMappingURL=ReturnTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReturnTypes.js","sourceRoot":"","sources":["../../src/generators/ReturnTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAOb,+CAA4E;AAE5E,SAAS,mBAAmB,CAC1B,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,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,EACb,OAAO,CACR,GAAG,CAAC;QACP;YACE,OAAO,IAAA,wCAA0B,EAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,OAAO,CACR,CAAC;KACL;AACH,CAAC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,OAAO,mBAAmB,CACxB,IAAI,EACJ,OAAO,EACP,GAAG,aAAa,aAAa,EAC7B,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0DAYC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,OAAO,mBAAmB,CACxB,IAAI,EACJ,OAAO,EACP,GAAG,aAAa,aAAa,EAC7B,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0DAYC","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/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport {CppCodegenOptions, translateFieldOrReturnType} from './ObjectTypes';\n\nfunction translateReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\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 options,\n )}>`;\n default:\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateReturnType',\n options,\n );\n }\n}\n\nexport function translateSpecReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return translateReturnType(\n type,\n aliases,\n `${baseAliasName}_returnType`,\n options,\n );\n}\n\nexport function translateImplReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return translateReturnType(\n type,\n aliases,\n `${baseAliasName}_returnType`,\n options,\n );\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import type { NativeModuleSchema } from '@react-native/codegen/lib/CodegenSchema';
|
|
7
|
+
import { AliasMap } from './AliasManaging';
|
|
8
|
+
export declare function generateValidateConstants(nativeModule: NativeModuleSchema, aliases: AliasMap): [string, string] | undefined;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
'use strict';
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateValidateConstants = void 0;
|
|
9
|
+
const AliasManaging_1 = require("./AliasManaging");
|
|
10
|
+
function generateValidateConstants(nativeModule, aliases) {
|
|
11
|
+
const candidates = nativeModule.spec.properties.filter(prop => prop.name === 'getConstants');
|
|
12
|
+
if (candidates.length === 0) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const getConstant = candidates[0];
|
|
16
|
+
const funcType = getConstant.typeAnnotation.type === 'NullableTypeAnnotation'
|
|
17
|
+
? getConstant.typeAnnotation.typeAnnotation
|
|
18
|
+
: getConstant.typeAnnotation;
|
|
19
|
+
if (funcType.params.length > 0 ||
|
|
20
|
+
funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation') {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const constantType = funcType.returnTypeAnnotation;
|
|
24
|
+
if (constantType.properties.length === 0) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const cppName = (0, AliasManaging_1.getAnonymousAliasCppName)(aliases, 'Constants', constantType);
|
|
28
|
+
return [
|
|
29
|
+
` TypedConstant<${cppName}>{0},`,
|
|
30
|
+
` REACT_SHOW_CONSTANT_SPEC_ERRORS(
|
|
31
|
+
0,
|
|
32
|
+
"${cppName}",
|
|
33
|
+
" REACT_GET_CONSTANTS(GetConstants) ${cppName} GetConstants() noexcept {/*implementation*/}\\n"
|
|
34
|
+
" REACT_GET_CONSTANTS(GetConstants) static ${cppName} GetConstants() noexcept {/*implementation*/}\\n");`,
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
exports.generateValidateConstants = generateValidateConstants;
|
|
38
|
+
//# sourceMappingURL=ValidateConstants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidateConstants.js","sourceRoot":"","sources":["../../src/generators/ValidateConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAGb,mDAAmE;AAEnE,SAAgB,yBAAyB,CACvC,YAAgC,EAChC,OAAiB;IAEjB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CACpD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CACrC,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GACZ,WAAW,CAAC,cAAc,CAAC,IAAI,KAAK,wBAAwB;QAC1D,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc;QAC3C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IACjC,IACE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,sBAAsB,EAC7D;QACA,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IACnD,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,IAAA,wCAAwB,EAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAE7E,OAAO;QACL,uBAAuB,OAAO,OAAO;QACrC;;aAES,OAAO;mDAC+B,OAAO;0DACA,OAAO,qDAAqD;KACnH,CAAC;AACJ,CAAC;AAtCD,8DAsCC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {NativeModuleSchema} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap, getAnonymousAliasCppName} from './AliasManaging';\n\nexport function generateValidateConstants(\n nativeModule: NativeModuleSchema,\n aliases: AliasMap,\n): [string, string] | undefined {\n const candidates = nativeModule.spec.properties.filter(\n prop => prop.name === 'getConstants',\n );\n if (candidates.length === 0) {\n return undefined;\n }\n\n const getConstant = candidates[0];\n const funcType =\n getConstant.typeAnnotation.type === 'NullableTypeAnnotation'\n ? getConstant.typeAnnotation.typeAnnotation\n : getConstant.typeAnnotation;\n if (\n funcType.params.length > 0 ||\n funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation'\n ) {\n return undefined;\n }\n\n const constantType = funcType.returnTypeAnnotation;\n if (constantType.properties.length === 0) {\n return undefined;\n }\n\n const cppName = getAnonymousAliasCppName(aliases, 'Constants', constantType);\n\n return [\n ` TypedConstant<${cppName}>{0},`,\n ` REACT_SHOW_CONSTANT_SPEC_ERRORS(\n 0,\n \"${cppName}\",\n \" REACT_GET_CONSTANTS(GetConstants) ${cppName} GetConstants() noexcept {/*implementation*/}\\\\n\"\n \" REACT_GET_CONSTANTS(GetConstants) static ${cppName} GetConstants() noexcept {/*implementation*/}\\\\n\");`,\n ];\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import type { NativeModuleSchema } from '@react-native/codegen/lib/CodegenSchema';
|
|
7
|
+
import { AliasMap } from './AliasManaging';
|
|
8
|
+
import type { CppCodegenOptions } from './ObjectTypes';
|
|
9
|
+
export declare function generateValidateMethods(nativeModule: NativeModuleSchema, aliases: AliasMap, options: CppCodegenOptions): [string, string];
|