/** * 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 strict * @format */ 'use strict'; import type {ComponentShape} from '../../CodegenSchema'; function upperCaseFirst(inString: string): string { return inString[0].toUpperCase() + inString.slice(1); } function toSafeJavaString(input: string): string { return input .split('-') .map(upperCaseFirst) .join(''); } function getImports(component: ComponentShape): Set { const imports: Set = new Set(); component.extendsProps.forEach(extendProps => { switch (extendProps.type) { case 'ReactNativeBuiltInType': switch (extendProps.knownTypeName) { case 'ReactNativeCoreViewProps': imports.add('import android.view.View;'); return; default: (extendProps.knownTypeName: empty); throw new Error('Invalid knownTypeName'); } default: (extendProps.type: empty); throw new Error('Invalid extended type'); } }); function addImportsForNativeName(name) { switch (name) { case 'ColorPrimitive': return; case 'ImageSourcePrimitive': imports.add('import com.facebook.react.bridge.ReadableMap;'); return; case 'PointPrimitive': imports.add('import com.facebook.react.bridge.ReadableMap;'); return; default: (name: empty); throw new Error( `Invalid NativePrimitiveTypeAnnotation name, got ${name}`, ); } } component.props.forEach(prop => { const typeAnnotation = prop.typeAnnotation; if (typeAnnotation.type === 'NativePrimitiveTypeAnnotation') { addImportsForNativeName(typeAnnotation.name); } if (typeAnnotation.type === 'ArrayTypeAnnotation') { imports.add('import com.facebook.react.bridge.ReadableArray;'); } }); return imports; } module.exports = { toSafeJavaString, getImports, };