Add support for primitive returning type
Summary: In this I add support for primitive types as return - String - Number - Boolean - Any - Void Reviewed By: TheSavior Differential Revision: D16108273 fbshipit-source-id: 2dbd1d5a852a8cf5baf378a73d860492fe2f87cb
This commit is contained in:
Родитель
3a5bdc17bb
Коммит
e8c5495961
|
@ -137,6 +137,14 @@ export type FunctionTypeAnnotationParamTypeAnnotation = $ReadOnly<{|
|
|||
| 'BooleanTypeAnnotation',
|
||||
|}>;
|
||||
|
||||
export type FunctionTypeAnnotationReturn = $ReadOnly<{|
|
||||
type:
|
||||
| 'StringTypeAnnotation'
|
||||
| 'NumberTypeAnnotation'
|
||||
| 'BooleanTypeAnnotation'
|
||||
| 'VoidTypeAnnotation',
|
||||
|}>;
|
||||
|
||||
export type FunctionTypeAnnotationParam = $ReadOnly<{|
|
||||
name: string,
|
||||
typeAnnotation: FunctionTypeAnnotationParamTypeAnnotation,
|
||||
|
@ -145,6 +153,7 @@ export type FunctionTypeAnnotationParam = $ReadOnly<{|
|
|||
export type FunctionTypeAnnotation = $ReadOnly<{|
|
||||
type: 'FunctionTypeAnnotation',
|
||||
params: $ReadOnlyArray<FunctionTypeAnnotationParam>,
|
||||
returnTypeAnnotation: FunctionTypeAnnotationReturn,
|
||||
|}>;
|
||||
|
||||
export type MethodTypeShape = $ReadOnly<{|
|
||||
|
|
|
@ -10,7 +10,31 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
const NATIVE_MODULES_WITH_NOT_EXISTING_TYPE = `
|
||||
const NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_PARAM = `
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
getString: (arg: NotString) => string;
|
||||
}
|
||||
|
||||
export default TurboModuleRegistry.getEnforcing<Spec>('SampleTurboModule');
|
||||
|
||||
`;
|
||||
|
||||
const NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_RETURN = `
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
|
@ -253,7 +277,8 @@ export default codegenNativeComponent<ModuleProps>('Module');
|
|||
|
||||
module.exports = {
|
||||
TWO_NATIVE_MODULES_EXPORTED_WITH_DEFAULT,
|
||||
NATIVE_MODULES_WITH_NOT_EXISTING_TYPE,
|
||||
NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_PARAM,
|
||||
NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_RETURN,
|
||||
NATIVE_MODULES_WITH_NOT_ONLY_METHODS,
|
||||
INCORRECT_NATIVE_MODULES,
|
||||
COMMANDS_DEFINED_INLINE,
|
||||
|
|
|
@ -8,7 +8,9 @@ exports[`RN Codegen Flow Parser Fails with error message COMMANDS_DEFINED_WITHOU
|
|||
|
||||
exports[`RN Codegen Flow Parser Fails with error message INCORRECT_NATIVE_MODULES 1`] = `"Interface properties for \\"SpecWithTypo has been specified incorrectly.\\""`;
|
||||
|
||||
exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_NOT_EXISTING_TYPE 1`] = `"Unsupported param type for method \\"getString\\", param \\"arg\\". Found GenericTypeAnnotation"`;
|
||||
exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_PARAM 1`] = `"Unsupported param type for method \\"getString\\", param \\"arg\\". Found GenericTypeAnnotation"`;
|
||||
|
||||
exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_NOT_EXISTING_TYPE_AS_RETURN 1`] = `"Unsupported param type for method \\"getString\\", param \\"arg\\". Found GenericTypeAnnotation"`;
|
||||
|
||||
exports[`RN Codegen Flow Parser Fails with error message NATIVE_MODULES_WITH_NOT_ONLY_METHODS 1`] = `"Only methods are supported as module properties. Found BooleanTypeAnnotation in sampleBool"`;
|
||||
|
||||
|
@ -3336,6 +3338,9 @@ Object {
|
|||
},
|
||||
},
|
||||
],
|
||||
"returnTypeAnnotation": Object {
|
||||
"type": "VoidTypeAnnotation",
|
||||
},
|
||||
"type": "FunctionTypeAnnotation",
|
||||
},
|
||||
},
|
||||
|
@ -3350,6 +3355,9 @@ Object {
|
|||
},
|
||||
},
|
||||
],
|
||||
"returnTypeAnnotation": Object {
|
||||
"type": "VoidTypeAnnotation",
|
||||
},
|
||||
"type": "FunctionTypeAnnotation",
|
||||
},
|
||||
},
|
||||
|
@ -3364,6 +3372,9 @@ Object {
|
|||
},
|
||||
},
|
||||
],
|
||||
"returnTypeAnnotation": Object {
|
||||
"type": "VoidTypeAnnotation",
|
||||
},
|
||||
"type": "FunctionTypeAnnotation",
|
||||
},
|
||||
},
|
||||
|
|
|
@ -14,6 +14,7 @@ import type {
|
|||
MethodTypeShape,
|
||||
FunctionTypeAnnotationParam,
|
||||
FunctionTypeAnnotationParamTypeAnnotation,
|
||||
FunctionTypeAnnotationReturn,
|
||||
} from '../../CodegenSchema.js';
|
||||
|
||||
function wrapPrimitiveIntoTypeAnnotation(
|
||||
|
@ -53,6 +54,25 @@ function getTypeAnnotationForParam(
|
|||
};
|
||||
}
|
||||
|
||||
function getReturnTypeAnnotation(
|
||||
methodName: string,
|
||||
type,
|
||||
): FunctionTypeAnnotationReturn {
|
||||
switch (type) {
|
||||
case 'BooleanTypeAnnotation':
|
||||
case 'NumberTypeAnnotation':
|
||||
case 'StringTypeAnnotation':
|
||||
case 'VoidTypeAnnotation':
|
||||
return {
|
||||
type,
|
||||
};
|
||||
default:
|
||||
(type: empty);
|
||||
throw new Error(
|
||||
`Unsupported return type for method "${methodName}", Found ${type}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
function buildMethodSchema(property: MethodAST): MethodTypeShape {
|
||||
const name: string = property.key.name;
|
||||
const value = property.value;
|
||||
|
@ -67,10 +87,16 @@ function buildMethodSchema(property: MethodAST): MethodTypeShape {
|
|||
const params = value.params.map(param =>
|
||||
getTypeAnnotationForParam(name, param),
|
||||
);
|
||||
|
||||
const returnTypeAnnotation = getReturnTypeAnnotation(
|
||||
name,
|
||||
value.returnType.type,
|
||||
);
|
||||
return {
|
||||
name,
|
||||
typeAnnotation: {
|
||||
type: 'FunctionTypeAnnotation',
|
||||
returnTypeAnnotation,
|
||||
params,
|
||||
},
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче