@react-native/codegen
Advanced tools
Comparing version 0.76.0-nightly-20240701-TEMP to 0.76.0-nightly-20240702-ad3df8466
@@ -85,5 +85,7 @@ /** | ||
wrapOptional = _require2.wrapOptional; | ||
const _require3 = require('./Utils'), | ||
createAliasResolver = _require3.createAliasResolver, | ||
getModules = _require3.getModules; | ||
const _require3 = require('../Utils'), | ||
toPascalCase = _require3.toPascalCase; | ||
const _require4 = require('./Utils'), | ||
createAliasResolver = _require4.createAliasResolver, | ||
getModules = _require4.getModules; | ||
function FileTemplate(config) { | ||
@@ -93,2 +95,3 @@ const packageName = config.packageName, | ||
jsName = config.jsName, | ||
eventEmitters = config.eventEmitters, | ||
methods = config.methods, | ||
@@ -124,6 +127,19 @@ imports = config.imports; | ||
${methods} | ||
${eventEmitters}${eventEmitters.length > 0 ? '\n\n' : ''}${methods} | ||
} | ||
`; | ||
} | ||
function EventEmitterTemplate(eventEmitter, imports) { | ||
return ` protected final void emit${toPascalCase(eventEmitter.name)}(${ | ||
eventEmitter.typeAnnotation.typeAnnotation.type !== 'VoidTypeAnnotation' | ||
? `${translateEventEmitterTypeToJavaType(eventEmitter, imports)} value` | ||
: '' | ||
}) { | ||
mEventEmitterCallback.invoke("${eventEmitter.name}"${ | ||
eventEmitter.typeAnnotation.typeAnnotation.type !== 'VoidTypeAnnotation' | ||
? ', value' | ||
: '' | ||
}); | ||
}`; | ||
} | ||
function MethodTemplate(config) { | ||
@@ -147,2 +163,26 @@ const abstract = config.abstract, | ||
} | ||
function translateEventEmitterTypeToJavaType(eventEmitter, imports) { | ||
switch (eventEmitter.typeAnnotation.typeAnnotation.type) { | ||
case 'StringTypeAnnotation': | ||
return 'String'; | ||
case 'NumberTypeAnnotation': | ||
case 'FloatTypeAnnotation': | ||
case 'DoubleTypeAnnotation': | ||
case 'Int32TypeAnnotation': | ||
return 'double'; | ||
case 'BooleanTypeAnnotation': | ||
return 'boolean'; | ||
case 'ObjectTypeAnnotation': | ||
case 'TypeAliasTypeAnnotation': | ||
imports.add('com.facebook.react.bridge.ReadableMap'); | ||
return 'ReadableMap'; | ||
case 'ArrayTypeAnnotation': | ||
imports.add('com.facebook.react.bridge.ReadableArray'); | ||
return 'ReadableArray'; | ||
default: | ||
throw new Error( | ||
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`, | ||
); | ||
} | ||
} | ||
function translateFunctionParamToJavaType( | ||
@@ -559,2 +599,5 @@ param, | ||
jsName: moduleName, | ||
eventEmitters: spec.eventEmitters | ||
.map(eventEmitter => EventEmitterTemplate(eventEmitter, imports)) | ||
.join('\n\n'), | ||
methods: methods.filter(Boolean).join('\n\n'), | ||
@@ -561,0 +604,0 @@ imports: Array.from(imports) |
@@ -97,3 +97,7 @@ /** | ||
}; | ||
const ModuleClassConstructorTemplate = ({hasteModuleName, methods}) => { | ||
const ModuleClassConstructorTemplate = ({ | ||
hasteModuleName, | ||
eventEmitters, | ||
methods, | ||
}) => { | ||
return ` | ||
@@ -106,3 +110,17 @@ ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const JavaTurboModule::InitParams ¶ms) | ||
}) | ||
.join('\n')} | ||
.join('\n')}${ | ||
eventEmitters.length > 0 | ||
? eventEmitters | ||
.map(eventEmitter => { | ||
return ` | ||
eventEmitterMap_["${eventEmitter.name}"] = std::make_shared<AsyncEventEmitter<folly::dynamic>>();`; | ||
}) | ||
.join('') | ||
: '' | ||
}${ | ||
eventEmitters.length > 0 | ||
? ` | ||
setEventEmitterCallback(params.instance);` | ||
: '' | ||
} | ||
}`.trim(); | ||
@@ -438,3 +456,5 @@ }; | ||
aliasMap = _nativeModules$hasteM.aliasMap, | ||
methods = _nativeModules$hasteM.spec.methods; | ||
_nativeModules$hasteM2 = _nativeModules$hasteM.spec, | ||
eventEmitters = _nativeModules$hasteM2.eventEmitters, | ||
methods = _nativeModules$hasteM2.methods; | ||
const resolveAlias = createAliasResolver(aliasMap); | ||
@@ -455,2 +475,3 @@ const translatedMethods = methods | ||
hasteModuleName, | ||
eventEmitters, | ||
methods: methods | ||
@@ -457,0 +478,0 @@ .map(({name: propertyName, typeAnnotation}) => { |
@@ -18,11 +18,14 @@ /** | ||
serializeStruct = _require2.serializeStruct; | ||
const _require3 = require('./serializeMethod'), | ||
serializeMethod = _require3.serializeMethod; | ||
const _require4 = require('./source/serializeModule'), | ||
serializeModuleSource = _require4.serializeModuleSource; | ||
const _require5 = require('./StructCollector'), | ||
StructCollector = _require5.StructCollector; | ||
const _require3 = require('./serializeEventEmitter'), | ||
EventEmitterHeaderTemplate = _require3.EventEmitterHeaderTemplate; | ||
const _require4 = require('./serializeMethod'), | ||
serializeMethod = _require4.serializeMethod; | ||
const _require5 = require('./source/serializeModule'), | ||
serializeModuleSource = _require5.serializeModuleSource; | ||
const _require6 = require('./StructCollector'), | ||
StructCollector = _require6.StructCollector; | ||
const ModuleDeclarationTemplate = ({ | ||
hasteModuleName, | ||
structDeclarations, | ||
eventEmitters, | ||
protocolMethods, | ||
@@ -36,3 +39,9 @@ }) => `${structDeclarations} | ||
@interface ${hasteModuleName}SpecBase : NSObject | ||
@interface ${hasteModuleName}SpecBase : NSObject { | ||
@protected | ||
facebook::react::EventEmitterCallback _eventEmitterCallback; | ||
} | ||
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper; | ||
${eventEmitters} | ||
@end | ||
@@ -169,2 +178,5 @@ | ||
structDeclarations: structStrs.join('\n'), | ||
eventEmitters: spec.eventEmitters | ||
.map(eventEmitter => EventEmitterHeaderTemplate(eventEmitter)) | ||
.join('\n'), | ||
protocolMethods: methodSerializations | ||
@@ -181,2 +193,3 @@ .map(({protocolMethod}) => protocolMethod) | ||
hasteModuleName, | ||
spec.eventEmitters, | ||
methodSerializations.filter( | ||
@@ -183,0 +196,0 @@ ({selector}) => selector !== '@selector(constantsToExport)', |
@@ -13,2 +13,5 @@ /** | ||
const _require = require('./../serializeEventEmitter'), | ||
EventEmitterImplementationTemplate = | ||
_require.EventEmitterImplementationTemplate; | ||
const ModuleTemplate = ({ | ||
@@ -18,5 +21,14 @@ hasteModuleName, | ||
moduleName, | ||
eventEmitters, | ||
methodSerializationOutputs, | ||
}) => ` | ||
@implementation ${hasteModuleName}SpecBase | ||
${eventEmitters | ||
.map(eventEmitter => EventEmitterImplementationTemplate(eventEmitter)) | ||
.join('\n')} | ||
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper | ||
{ | ||
_eventEmitterCallback = std::move(eventEmitterCallbackWrapper->_eventEmitterCallback); | ||
} | ||
@end | ||
@@ -55,3 +67,19 @@ | ||
) | ||
.join('\n' + ' '.repeat(8))} | ||
.join('\n' + ' '.repeat(8))}${ | ||
eventEmitters.length > 0 | ||
? eventEmitters | ||
.map(eventEmitter => { | ||
return ` | ||
eventEmitterMap_["${eventEmitter.name}"] = std::make_shared<AsyncEventEmitter<id>>();`; | ||
}) | ||
.join('') | ||
: '' | ||
}${ | ||
eventEmitters.length > 0 | ||
? ` | ||
setEventEmitterCallback([&](const std::string &name, id value) { | ||
static_cast<AsyncEventEmitter<id> &>(*eventEmitterMap_[name]).emit(value); | ||
});` | ||
: '' | ||
} | ||
} | ||
@@ -93,2 +121,3 @@ } // namespace facebook::react`; | ||
moduleName, | ||
eventEmitters, | ||
methodSerializationOutputs, | ||
@@ -100,2 +129,3 @@ ) { | ||
moduleName, | ||
eventEmitters, | ||
methodSerializationOutputs, | ||
@@ -102,0 +132,0 @@ }); |
{ | ||
"name": "@react-native/codegen", | ||
"version": "0.76.0-nightly-20240701-TEMP", | ||
"version": "0.76.0-nightly-20240702-ad3df8466", | ||
"description": "Code generation tools for React Native", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1656202
192
26828