UNPKG

react-native-nitro-modules

Version:

Insanely fast native C++, Swift or Kotlin modules with a statically compiled binding layer to JSI.

62 lines (60 loc) 2.12 kB
export interface CustomTypeConfig { /** * Represents the name of the C++ header that will be included * to support your type. * * This C++ header should be written by you, and findable within * the user-search-paths so it can be included. */ include: string /** * A flag that enables const-reference passing for heavy types * to prevent unnecessary copies. * When `true`, the type will be passed to clients as a `const T&` instead of just `T`. * @default false */ canBePassedByReference?: boolean } /** * Represents a custom, manually written native type. * - {@linkcode TypeName}: Represents the name of the C++ type (class, struct, alias). * - {@linkcode Config}: Configures how the C++ type is included, used, and typed. * * **You** then need to create a header file that is importable with the filename specified in {@linkcode Config.include}. * @example * ```ts * type MyOwnString = CustomType<string, 'MyOwnString', { include: 'MyOwnString.hpp' }> * interface MyHybrid extends HybridObject<{ … }> { * getValue(): MyOwnString * } * ``` * The C++ header will always be included by Nitro as a user-search-path header, that is; * ```cpp * #include "MyOwnString.hpp" * ``` * The C++ header (`MyOwnString.hpp`) then needs to define the type `MyOwnString` * within the namespace of your Nitro Module (`namespace margelo::nitro::...`), * and an overload for `JSIConverter<MyOwnString>` within the Nitro core namespace * (`namespace margelo::nitro`): * ```cpp * namespace margelo::nitro::test { * using MyOwnString = std::string; * } * namespace margelo::nitro { * template<> * struct JSIConverter<test::MyOwnString> final { * static test::MyOwnString fromJSI(jsi::Runtime&, const jsi::Value&); * static jsi::Value toJSI(jsi::Runtime&, test::MyOwnString); * static bool canConvert(jsi::Runtime&, const jsi::Value& value); * } * } * ``` */ export type CustomType< T, TypeName extends string, Config extends CustomTypeConfig, > = T & { readonly __customTypeName?: TypeName readonly __customTypeConfig?: Config }