From b848af3b08399dba803b846ef96a9f4f7674e2da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Osadnik?= Date: Mon, 8 Jul 2019 06:14:13 -0700 Subject: [PATCH] Add support for optional methods Summary: This diff adds an optional property. #Facebook Following this doc: https://our.intern.facebook.com/intern/wiki/React_Native/rctexport-interface-support/?vitals_event=wiki_click_navigation_link I suppose it's vital to support this property as well. However i don't know if it's really useful, so thus I made a separated diff for it. Reviewed By: TheSavior Differential Revision: D16121408 fbshipit-source-id: 15491575e999ee4fcddfd176f52d927789458061 --- packages/react-native-codegen/src/CodegenSchema.js | 1 + .../src/parsers/flow/__test_fixtures__/fixtures.js | 2 +- .../flow/__tests__/__snapshots__/parser-test.js.snap | 8 ++++++++ packages/react-native-codegen/src/parsers/flow/methods.js | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/react-native-codegen/src/CodegenSchema.js b/packages/react-native-codegen/src/CodegenSchema.js index 638dc300e05..1ec1d415d79 100644 --- a/packages/react-native-codegen/src/CodegenSchema.js +++ b/packages/react-native-codegen/src/CodegenSchema.js @@ -172,6 +172,7 @@ export type FunctionTypeAnnotation = $ReadOnly<{| type: 'FunctionTypeAnnotation', params: $ReadOnlyArray, returnTypeAnnotation: FunctionTypeAnnotationReturn, + optional: boolean, |}>; export type MethodTypeShape = $ReadOnly<{| diff --git a/packages/react-native-codegen/src/parsers/flow/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/parsers/flow/__test_fixtures__/fixtures.js index d485a858fe9..a32871964c1 100644 --- a/packages/react-native-codegen/src/parsers/flow/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/parsers/flow/__test_fixtures__/fixtures.js @@ -51,7 +51,7 @@ import type {TurboModule} from '../RCTExport'; import * as TurboModuleRegistry from '../TurboModuleRegistry'; export interface Spec extends TurboModule { - +passBool: (arg: boolean) => void; + +passBool?: (arg: boolean) => void; +passNumber: (arg: number) => void; +passString: (arg: string) => void; } diff --git a/packages/react-native-codegen/src/parsers/flow/__tests__/__snapshots__/parser-test.js.snap b/packages/react-native-codegen/src/parsers/flow/__tests__/__snapshots__/parser-test.js.snap index 84caa4f189b..a8489156ec6 100644 --- a/packages/react-native-codegen/src/parsers/flow/__tests__/__snapshots__/parser-test.js.snap +++ b/packages/react-native-codegen/src/parsers/flow/__tests__/__snapshots__/parser-test.js.snap @@ -3336,6 +3336,7 @@ Object { Object { "name": "getArray", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3374,6 +3375,7 @@ Object { Object { "name": "getArray", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3412,6 +3414,7 @@ Object { Object { "name": "passBool", "typeAnnotation": Object { + "optional": true, "params": Array [ Object { "name": "arg", @@ -3429,6 +3432,7 @@ Object { Object { "name": "passNumber", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3446,6 +3450,7 @@ Object { Object { "name": "passString", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3478,6 +3483,7 @@ Object { Object { "name": "getArray", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3575,6 +3581,7 @@ Object { Object { "name": "getNumber", "typeAnnotation": Object { + "optional": false, "params": Array [ Object { "name": "arg", @@ -3592,6 +3599,7 @@ Object { Object { "name": "getVoid", "typeAnnotation": Object { + "optional": false, "params": Array [], "returnTypeAnnotation": Object { "type": "VoidTypeAnnotation", diff --git a/packages/react-native-codegen/src/parsers/flow/methods.js b/packages/react-native-codegen/src/parsers/flow/methods.js index 08cdb62d013..e40564fb824 100644 --- a/packages/react-native-codegen/src/parsers/flow/methods.js +++ b/packages/react-native-codegen/src/parsers/flow/methods.js @@ -222,6 +222,7 @@ function buildMethodSchema( type: 'FunctionTypeAnnotation', returnTypeAnnotation, params, + optional: property.optional, }, }; }