/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native-codegen/src/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js
87 строк
3 KB
Eli White
Add NumberLiteralTypeAnnotation support (#47323)
04 ноя 2024, 23:58
04 ноя 2024, 23:58
dd47210
Код
Авторство
О чём код?
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict * @format */ import type {NativeModuleEventEmitterShape} from '../../../CodegenSchema'; const {toPascalCase} = require('../../Utils'); function getEventEmitterTypeObjCType( eventEmitter: NativeModuleEventEmitterShape, ): string { const type = eventEmitter.typeAnnotation.typeAnnotation.type; switch (type) { case 'StringTypeAnnotation': return 'NSString *_Nonnull'; case 'StringLiteralTypeAnnotation': return 'NSString *_Nonnull'; case 'StringLiteralUnionTypeAnnotation': return 'NSString *_Nonnull'; case 'NumberTypeAnnotation': case 'NumberLiteralTypeAnnotation': return 'NSNumber *_Nonnull'; case 'BooleanTypeAnnotation': return 'BOOL'; case 'GenericObjectTypeAnnotation': case 'ObjectTypeAnnotation': case 'TypeAliasTypeAnnotation': return 'NSDictionary *'; case 'ArrayTypeAnnotation': return 'NSArray<id<NSObject>> *'; case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': case 'Int32TypeAnnotation': case 'VoidTypeAnnotation': // TODO: Add support for these types throw new Error( `Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`, ); default: (type: empty); throw new Error( `Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`, ); } } function EventEmitterHeaderTemplate( eventEmitter: NativeModuleEventEmitterShape, ): string { return `- (void)emit${toPascalCase(eventEmitter.name)}${ eventEmitter.typeAnnotation.typeAnnotation.type !== 'VoidTypeAnnotation' ? `:(${getEventEmitterTypeObjCType(eventEmitter)})value` : '' };`; } function EventEmitterImplementationTemplate( eventEmitter: NativeModuleEventEmitterShape, ): string { return `- (void)emit${toPascalCase(eventEmitter.name)}${ eventEmitter.typeAnnotation.typeAnnotation.type !== 'VoidTypeAnnotation' ? `:(${getEventEmitterTypeObjCType(eventEmitter)})value` : '' } { _eventEmitterCallback("${eventEmitter.name}", ${ eventEmitter.typeAnnotation.typeAnnotation.type !== 'VoidTypeAnnotation' ? eventEmitter.typeAnnotation.typeAnnotation.type !== 'BooleanTypeAnnotation' ? 'value' : '[NSNumber numberWithBool:value]' : 'nil' }); }`; } module.exports = { EventEmitterHeaderTemplate, EventEmitterImplementationTemplate, };