From de32fd25393c6ac0bcec87a39355b5183f2d4853 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Mon, 19 Oct 2020 21:56:26 -0700 Subject: [PATCH] GenerateModuleH: Replace string replace with string templates Summary: ## Benefits: - Improved Readability - Improved type-safety with templates Changelog: [Internal] Differential Revision: D24386278 fbshipit-source-id: b6cfa9fe17e1f7c54f4d541fd19281bf9a6c6796 --- .../src/generators/modules/GenerateModuleH.js | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleH.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleH.js index 37b7b38f3e..8c45cd4fad 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleH.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleH.js @@ -23,16 +23,26 @@ const {unwrapNullable} = require('../../parsers/flow/modules/utils'); type FilesOutput = Map; -const moduleTemplate = `class JSI_EXPORT ::_HASTE_MODULE_NAME_::CxxSpecJSI : public TurboModule { +const ModuleClassDeclarationTemplate = ({ + hasteModuleName, + moduleProperties, +}: $ReadOnly<{|hasteModuleName: string, moduleProperties: string|}>) => { + return `class JSI_EXPORT ${hasteModuleName}CxxSpecJSI : public TurboModule { protected: - ::_HASTE_MODULE_NAME_::CxxSpecJSI(std::shared_ptr jsInvoker); + ${hasteModuleName}CxxSpecJSI(std::shared_ptr jsInvoker); public: -::_MODULE_PROPERTIES_:: +${moduleProperties} };`; +}; -const template = `/** +const FileTemplate = ({ + modules, +}: $ReadOnly<{| + modules: string, +|}>) => { + return `/** * ${'C'}opyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the @@ -47,11 +57,12 @@ const template = `/** namespace facebook { namespace react { -::_MODULES_:: +${modules} } // namespace react } // namespace facebook `; +}; function translatePrimitiveJSTypeToCpp( nullableTypeAnnotation: Nullable, @@ -164,15 +175,16 @@ module.exports = { ); }) .join('\n'); - return moduleTemplate - .replace(/::_MODULE_PROPERTIES_::/g, traversedProperties) - .replace(/::_HASTE_MODULE_NAME_::/g, hasteModuleName) - .replace('::_PROPERTIES_MAP_::', ''); + + return ModuleClassDeclarationTemplate({ + hasteModuleName, + moduleProperties: traversedProperties, + }); }) .join('\n'); const fileName = 'NativeModules.h'; - const replacedTemplate = template.replace(/::_MODULES_::/g, modules); + const replacedTemplate = FileTemplate({modules}); return new Map([[fileName, replacedTemplate]]); },