@react-native-windows/codegen 0.81.0 → 0.82.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -13
- package/lib-commonjs/generators/GenerateComponentWindows.js +14 -0
- package/lib-commonjs/generators/GenerateComponentWindows.js.map +1 -1
- package/lib-commonjs/generators/GenerateModuleCpp.d.ts +1 -0
- package/lib-commonjs/generators/GenerateModuleCpp.js +186 -0
- package/lib-commonjs/generators/GenerateModuleCpp.js.map +1 -0
- package/lib-commonjs/index.js +3 -1
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +8 -7
- package/src/generators/GenerateComponentWindows.ts +14 -0
- package/src/generators/GenerateModuleCpp.js +245 -0
- package/src/index.ts +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,34 +1,54 @@
|
|
|
1
1
|
# Change Log - @react-native-windows/codegen
|
|
2
2
|
|
|
3
|
-
<!-- This log was last generated on
|
|
3
|
+
<!-- This log was last generated on Tue, 20 Jan 2026 18:42:21 GMT and should not be manually modified. -->
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
-
## 0.
|
|
7
|
+
## 0.82.0-preview.2
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Tue, 20 Jan 2026 18:42:21 GMT
|
|
10
10
|
|
|
11
|
-
###
|
|
11
|
+
### Changes
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
- Bump @react-native-windows/fs to v0.81.0
|
|
13
|
+
- forking GenerateModuleCpp (66076509+vineethkuttan@users.noreply.github.com)
|
|
15
14
|
|
|
16
|
-
## 0.
|
|
15
|
+
## 0.82.0-preview.1
|
|
17
16
|
|
|
18
|
-
Wed,
|
|
17
|
+
Wed, 14 Jan 2026 13:07:18 GMT
|
|
19
18
|
|
|
20
19
|
### Changes
|
|
21
20
|
|
|
22
|
-
-
|
|
21
|
+
- Promote 0.82 to preview (74712637+iamAbhi-916@users.noreply.github.com)
|
|
22
|
+
- Bump @react-native-windows/fs to v0.82.0-preview.1
|
|
23
23
|
|
|
24
|
-
## 0.
|
|
24
|
+
## 0.0.0-canary.129
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Sat, 10 Jan 2026 06:40:18 GMT
|
|
27
27
|
|
|
28
28
|
### Changes
|
|
29
29
|
|
|
30
|
-
-
|
|
31
|
-
|
|
30
|
+
- Add ability to customize native accessibility of custom native components (30809111+acoates-ms@users.noreply.github.com)
|
|
31
|
+
|
|
32
|
+
## 0.0.0-canary.128
|
|
33
|
+
|
|
34
|
+
Mon, 17 Nov 2025 06:42:06 GMT
|
|
35
|
+
|
|
36
|
+
### Changes
|
|
37
|
+
|
|
38
|
+
- Bump @react-native-windows/fs to v0.0.0-canary.70
|
|
39
|
+
- Bump @rnw-scripts/just-task to v2.3.58
|
|
40
|
+
|
|
41
|
+
## 0.0.0-canary.127
|
|
42
|
+
|
|
43
|
+
Wed, 12 Nov 2025 21:00:41 GMT
|
|
44
|
+
|
|
45
|
+
### Changes
|
|
46
|
+
|
|
47
|
+
- Fix CI linter issues caused by unbroken errors (vmorozov@microsoft.com)
|
|
48
|
+
- Integrate 0.82.0-nightly-20250806-5936f29d6 (66076509+vineethkuttan@users.noreply.github.com)
|
|
49
|
+
- Bump @react-native-windows/fs to v0.0.0-canary.69
|
|
50
|
+
- Bump @rnw-scripts/eslint-config to v1.2.38
|
|
51
|
+
- Bump @rnw-scripts/just-task to v2.3.57
|
|
32
52
|
|
|
33
53
|
## 0.0.0-canary.126
|
|
34
54
|
|
|
@@ -118,6 +118,12 @@ struct Base::_COMPONENT_NAME_:: {
|
|
|
118
118
|
winrt::Microsoft::ReactNative::ComponentViewUpdateMask /*mask*/) noexcept {
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
// CreateAutomationPeer will only be called if this method is overridden
|
|
122
|
+
virtual winrt::Windows::Foundation::IInspectable CreateAutomationPeer(const winrt::Microsoft::ReactNative::ComponentView & /*view*/,
|
|
123
|
+
const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& /*args*/) noexcept {
|
|
124
|
+
return nullptr;
|
|
125
|
+
}
|
|
126
|
+
|
|
121
127
|
::_COMPONENT_VIEW_COMMAND_HANDLERS_::
|
|
122
128
|
|
|
123
129
|
::_COMPONENT_VIEW_COMMAND_HANDLER_::
|
|
@@ -198,6 +204,14 @@ void Register::_COMPONENT_NAME_::NativeComponent(
|
|
|
198
204
|
});
|
|
199
205
|
}
|
|
200
206
|
|
|
207
|
+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateAutomationPeer != &Base::_COMPONENT_NAME_::<TUserData>::CreateAutomationPeer) {
|
|
208
|
+
builder.SetCreateAutomationPeerHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
|
|
209
|
+
const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& args) noexcept {
|
|
210
|
+
auto userData = view.UserData().as<TUserData>();
|
|
211
|
+
return userData->CreateAutomationPeer(view, args);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
201
215
|
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
|
|
202
216
|
auto userData = winrt::make_self<TUserData>();
|
|
203
217
|
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerateComponentWindows.js","sourceRoot":"","sources":["../../src/generators/GenerateComponentWindows.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n SchemaType,\n EventTypeAnnotation,\n PropTypeAnnotation,\n ObjectTypeAnnotation,\n CommandParamTypeAnnotation,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {getAliasCppName, setPreferredModuleName} from './AliasManaging';\nimport {\n translateComponentPropsFieldType,\n translateComponentEventType,\n translateCommandParamType,\n} from './PropObjectTypes';\nimport type {CppStringTypes} from './ObjectTypes';\nimport type {AliasMap} from './AliasManaging';\n\nexport type {CppStringTypes} from './ObjectTypes';\n\ntype FilesOutput = Map<string, string>;\n\nconst headerTemplate = `/*\n * This file is auto-generated from ::_COMPONENT_NAME_::NativeComponent spec file in flow / TypeScript.\n */\n// clang-format off\n#pragma once\n\n#include <NativeModules.h>\n\n#ifdef RNW_NEW_ARCH\n#include <JSValueComposition.h>\n\n#include <winrt/Microsoft.ReactNative.Composition.h>\n#include <winrt/Microsoft.UI.Composition.h>\n#endif // #ifdef RNW_NEW_ARCH`;\n\nconst propsTemplate = `REACT_STRUCT(::_PROPS_NAME_::)\nstruct ::_PROPS_NAME_:: : winrt::implements<::_PROPS_NAME_::, winrt::Microsoft::ReactNative::IComponentProps> {\n ::_PROPS_NAME_::(winrt::Microsoft::ReactNative::ViewProps props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom)\n : ViewProps(props)\n {\n if (cloneFrom) {\n auto cloneFromProps = cloneFrom.as<::_PROPS_NAME_::>();\n::_PROP_INITIALIZERS_:: \n }\n }\n\n void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept {\n winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this);\n }\n\n::_PROPS_FIELDS_::\n const winrt::Microsoft::ReactNative::ViewProps ViewProps;\n};`;\n\nconst propsObjectTemplate = `REACT_STRUCT(::_OBJECT_NAME_::)\nstruct ::_OBJECT_NAME_:: {\n::_OBJECT_FIELDS_::};\n`;\nconst eventsObjectTemplate = `REACT_STRUCT(::_OBJECT_NAME_::)\nstruct ::_OBJECT_NAME_:: {\n::_OBJECT_FIELDS_::};\n`;\n\nconst eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &value) const {\n m_eventEmitter.DispatchEvent(L\"::_EVENT_NAME_NO_ON_::\", [value](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {\n winrt::Microsoft::ReactNative::WriteValue(writer, value);\n });\n }`;\n\nconst eventEmitterTemplate = `::_COMPONENT_EVENT_OBJECT_TYPES_::\n\nstruct ::_EVENT_EMITTER_NAME_:: {\n ::_EVENT_EMITTER_NAME_::(const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter)\n : m_eventEmitter(eventEmitter) {}\n\n::_EVENT_EMITTER_USINGS_::\n\n::_EVENT_EMITTER_METHODS_::\n\n private:\n winrt::Microsoft::ReactNative::EventEmitter m_eventEmitter{nullptr};\n};`;\n\nconst baseStructTemplate = `\ntemplate<typename TUserData>\nstruct Base::_COMPONENT_NAME_:: {\n\n virtual void UpdateProps(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::com_ptr<::_COMPONENT_NAME_::Props> &newProps,\n const winrt::com_ptr<::_COMPONENT_NAME_::Props> &/*oldProps*/) noexcept {\n m_props = newProps;\n }\n\n // UpdateLayoutMetrics will only be called if this method is overridden\n virtual void UpdateLayoutMetrics(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::LayoutMetrics &/*newLayoutMetrics*/,\n const winrt::Microsoft::ReactNative::LayoutMetrics &/*oldLayoutMetrics*/) noexcept {\n }\n\n // UpdateState will only be called if this method is overridden\n virtual void UpdateState(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::IComponentState &/*newState*/) noexcept {\n }\n\n virtual void UpdateEventEmitter(const std::shared_ptr<::_COMPONENT_NAME_::EventEmitter> &eventEmitter) noexcept {\n m_eventEmitter = eventEmitter;\n }\n\n // MountChildComponentView will only be called if this method is overridden\n virtual void MountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &/*args*/) noexcept {\n }\n\n // UnmountChildComponentView will only be called if this method is overridden\n virtual void UnmountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &/*args*/) noexcept {\n }\n\n // Initialize will only be called if this method is overridden\n virtual void Initialize(const winrt::Microsoft::ReactNative::ComponentView &/*view*/) noexcept {\n }\n\n // CreateVisual will only be called if this method is overridden\n virtual winrt::Microsoft::UI::Composition::Visual CreateVisual(const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n return view.as<winrt::Microsoft::ReactNative::Composition::ComponentView>().Compositor().CreateSpriteVisual();\n }\n\n // FinalizeUpdate will only be called if this method is overridden\n virtual void FinalizeUpdate(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n winrt::Microsoft::ReactNative::ComponentViewUpdateMask /*mask*/) noexcept {\n }\n\n::_COMPONENT_VIEW_COMMAND_HANDLERS_::\n\n ::_COMPONENT_VIEW_COMMAND_HANDLER_::\n\n const std::shared_ptr<::_COMPONENT_NAME_::EventEmitter>& EventEmitter() const { return m_eventEmitter; }\n const winrt::com_ptr<::_COMPONENT_NAME_::Props>& Props() const { return m_props; }\n\nprivate:\n winrt::com_ptr<::_COMPONENT_NAME_::Props> m_props;\n std::shared_ptr<::_COMPONENT_NAME_::EventEmitter> m_eventEmitter;\n};\n`;\n\nconst registerTemplate = `\ntemplate <typename TUserData>\nvoid Register::_COMPONENT_NAME_::NativeComponent(\n winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder,\n std::function<void(const winrt::Microsoft::ReactNative::Composition::IReactCompositionViewComponentBuilder&)> builderCallback) noexcept {\n packageBuilder.as<winrt::Microsoft::ReactNative::IReactPackageBuilderFabric>().AddViewComponent(\n L\"::_COMPONENT_NAME_::\", [builderCallback](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept {\n auto compBuilder = builder.as<winrt::Microsoft::ReactNative::Composition::IReactCompositionViewComponentBuilder>();\n\n builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props,\n const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) noexcept {\n return winrt::make<::_COMPONENT_NAME_::Props>(props, cloneFrom); \n });\n\n builder.SetUpdatePropsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::IComponentProps &newProps,\n const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateProps(view, newProps ? newProps.as<::_COMPONENT_NAME_::Props>() : nullptr, oldProps ? oldProps.as<::_COMPONENT_NAME_::Props>() : nullptr);\n });\n\n compBuilder.SetUpdateLayoutMetricsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::LayoutMetrics &newLayoutMetrics,\n const winrt::Microsoft::ReactNative::LayoutMetrics &oldLayoutMetrics) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateLayoutMetrics(view, newLayoutMetrics, oldLayoutMetrics);\n });\n\n builder.SetUpdateEventEmitterHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateEventEmitter(std::make_shared<::_COMPONENT_NAME_::EventEmitter>(eventEmitter));\n });\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &Base::_COMPONENT_NAME_::<TUserData>::FinalizeUpdate) {\n builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->FinalizeUpdate(view, mask);\n });\n } \n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &Base::_COMPONENT_NAME_::<TUserData>::UpdateState) {\n builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateState(view, newState);\n });\n }\n\n::_REGISTER_CUSTOM_COMMAND_HANDLER_::\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::MountChildComponentView) {\n builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->MountChildComponentView(view, args);\n });\n }\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::UnmountChildComponentView) {\n builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->UnmountChildComponentView(view, args);\n });\n }\n\n compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n auto userData = winrt::make_self<TUserData>();\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {\n userData->Initialize(view);\n }\n view.UserData(*userData);\n });\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &Base::_COMPONENT_NAME_::<TUserData>::CreateVisual) {\n compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->CreateVisual(view);\n });\n }\n\n // Allow app to further customize the builder\n if (builderCallback) {\n builderCallback(compBuilder);\n }\n });\n}\n`;\n\nconst fileTemplate = `\n${headerTemplate}\n\n#ifdef RNW_NEW_ARCH\n\nnamespace ::_NAMESPACE_:: {\n\n::_COMPONENT_PROP_OBJECT_TYPES_::\n::_COMPONENT_PROP_TYPES_::\n\n::_COMPONENT_EVENT_EMITTER_::\n\n::_BASE_COMPONENT_STRUCT_::\n\n::_COMPONENT_REGISTRATION_::\n} // namespace ::_NAMESPACE_::\n\n#endif // #ifdef RNW_NEW_ARCH\n`;\n\nfunction capitalizeFirstLetter(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function createComponentGenerator({\n namespace,\n cppStringType,\n}: {\n namespace: string;\n cppStringType: CppStringTypes;\n}) {\n return (\n _libraryName: string,\n schema: SchemaType,\n _moduleSpecName: string,\n ): FilesOutput => {\n const files = new Map<string, string>();\n\n const cppCodegenOptions = {cppStringType};\n\n for (const componentName of Object.keys(schema.modules)) {\n const component = schema.modules[componentName];\n setPreferredModuleName(componentName);\n\n if (component.type === 'Component') {\n console.log(`Generating ${componentName}.g.h`);\n\n const componentShape = component.components[componentName];\n\n componentShape.extendsProps.forEach(propsBaseType => {\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n propsBaseType.type !== 'ReactNativeBuiltInType' ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n propsBaseType.knownTypeName !== 'ReactNativeCoreViewProps'\n ) {\n throw new Error(\n 'Currently only supports props extending from ViewProps',\n );\n }\n });\n\n // Props\n const propObjectAliases: AliasMap<\n ObjectTypeAnnotation<PropTypeAnnotation>\n > = {types: {}, jobs: []};\n const propsName = `${componentName}Props`;\n const propsFields = componentShape.props\n .map(prop => {\n const propType = translateComponentPropsFieldType(\n prop.typeAnnotation,\n propObjectAliases,\n `${propsName}_${prop.name}`,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${prop.name})\\n ${\n prop.optional && !propType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${propType.type}>`\n : propType.type\n } ${prop.name}${propType.initializer};\\n`;\n })\n .join('\\n');\n\n const propInitializers = componentShape.props\n .map(prop => {\n return ` ${prop.name} = cloneFromProps->${prop.name};`;\n })\n .join('\\n');\n\n const propObjectTypes = propObjectAliases.jobs\n .map(propObjectTypeName => {\n const propObjectType = propObjectAliases.types[propObjectTypeName]!;\n const propsObjectFields = propObjectType.properties\n .map(property => {\n const propType = translateComponentPropsFieldType(\n property.typeAnnotation,\n propObjectAliases,\n `${propsName}_${property.name}`,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${property.name})\\n ${\n property.optional &&\n !propType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${propType.type}>`\n : propType.type\n } ${property.name}${propType.initializer};\\n`;\n })\n .join('\\n');\n\n return propsObjectTemplate\n .replace(\n /::_OBJECT_NAME_::/g,\n getAliasCppName(propObjectTypeName),\n )\n .replace(/::_OBJECT_FIELDS_::/g, propsObjectFields);\n })\n .join('\\n');\n\n // Events\n const eventObjectAliases: AliasMap<\n ObjectTypeAnnotation<EventTypeAnnotation>\n > = {types: {}, jobs: []};\n const eventEmitterName = `${componentName}EventEmitter`;\n const eventEmitterMethods = componentShape.events\n .filter(event => event.typeAnnotation.argument)\n .map(event => {\n if (event.typeAnnotation.argument?.baseTypes) {\n throw new Error(\n 'Events with base type arguments not currently supported',\n );\n }\n\n // Called to collect the eventObjectAliases\n translateComponentEventType(\n event.typeAnnotation.argument!,\n eventObjectAliases,\n `${event.name}`,\n cppCodegenOptions,\n );\n\n // onSomething -> something\n let eventNameLower = event.name.replace('on', '');\n eventNameLower =\n eventNameLower[0].toLowerCase() + eventNameLower.slice(1);\n\n return eventEmitterMethodTemplate\n .replace(/::_EVENT_NAME_::/g, event.name)\n .replace(/::_EVENT_NAME_NO_ON_::/g, eventNameLower)\n .replace(\n /::_EVENT_OBJECT_TYPE_::/g,\n event.name.replace('on', 'On'),\n );\n })\n .join('\\n\\n');\n\n const eventObjects = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n const eventObjectType =\n eventObjectAliases.types[eventObjectTypeName]!;\n const eventObjectFields = eventObjectType.properties\n .map(property => {\n const eventPropType = translateComponentEventType(\n property.typeAnnotation,\n eventObjectAliases,\n eventObjectTypeName,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${property.name})\\n ${\n property.optional &&\n !eventPropType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${eventPropType.type}>`\n : eventPropType.type\n } ${property.name}${eventPropType.initializer};\\n`;\n })\n .join('\\n');\n return eventsObjectTemplate\n .replace(\n /::_OBJECT_NAME_::/g,\n `${componentName}_${eventObjectTypeName.replace('on', 'On')}`,\n )\n .replace(/::_OBJECT_FIELDS_::/g, eventObjectFields);\n })\n .join('\\n');\n\n const eventObjectUsings = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n return ` using ${eventObjectTypeName.replace(\n 'on',\n 'On',\n )} = ${componentName}_${eventObjectTypeName.replace('on', 'On')};`;\n })\n .join('\\n');\n\n const eventEmitter = eventEmitterTemplate\n .replace(/::_COMPONENT_EVENT_OBJECT_TYPES_::/g, eventObjects)\n .replace(/::_EVENT_EMITTER_METHODS_::/g, eventEmitterMethods)\n .replace(/::_EVENT_EMITTER_USINGS_::/g, eventObjectUsings);\n\n // Commands\n const commandAliases: AliasMap<\n ObjectTypeAnnotation<CommandParamTypeAnnotation>\n > = {types: {}, jobs: []};\n const hasAnyCommands = componentShape.commands.length !== 0;\n const commandHandlers = hasAnyCommands\n ? componentShape.commands\n .map(command => {\n const commandArgs = command.typeAnnotation.params\n .map(param => {\n const commandArgType = translateCommandParamType(\n param.typeAnnotation,\n commandAliases,\n `${componentName}_${command.name}`,\n cppCodegenOptions,\n );\n return `${\n param.optional &&\n !commandArgType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${commandArgType.type}>`\n : commandArgType.type\n } ${param.name}`;\n })\n .join(', ');\n\n return ` // You must provide an implementation of this method to handle the \"${\n command.name\n }\" command\n virtual void Handle${capitalizeFirstLetter(\n command.name,\n )}Command(${commandArgs}) noexcept = 0;`;\n })\n .join('\\n\\n')\n : '';\n\n const commandHandler = hasAnyCommands\n ? `void HandleCommand(const winrt::Microsoft::ReactNative::ComponentView &view, const winrt::Microsoft::ReactNative::HandleCommandArgs& args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n auto commandName = args.CommandName();\n${componentShape.commands\n .map(command => {\n const commaSeparatedCommandArgs = command.typeAnnotation.params\n .map(param => param.name)\n .join(', ');\n return ` if (commandName == L\"${command.name}\") {\n${\n command.typeAnnotation.params.length !== 0\n ? ` ${command.typeAnnotation.params\n .map(param => {\n const commandArgType = translateCommandParamType(\n param.typeAnnotation,\n commandAliases,\n `${componentName}_${command.name}`,\n cppCodegenOptions,\n );\n return `${\n param.optional &&\n !commandArgType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${commandArgType.type}>`\n : commandArgType.type\n } ${param.name};`;\n })\n .join('\\n')}\n winrt::Microsoft::ReactNative::ReadArgs(args.CommandArgs(), ${commaSeparatedCommandArgs});`\n : ''\n}\n userData->Handle${capitalizeFirstLetter(\n command.name,\n )}Command(${commaSeparatedCommandArgs});\n return;\n }`;\n })\n .join('\\n\\n')}\n }`\n : '';\n\n const registerCommandHandler = hasAnyCommands\n ? ` builder.SetCustomCommandHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::HandleCommandArgs& args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->HandleCommand(view, args);\n });`\n : '';\n\n const baseType = baseStructTemplate\n .replace(/::_COMPONENT_VIEW_COMMAND_HANDLERS_::/g, commandHandlers)\n .replace(/::_COMPONENT_VIEW_COMMAND_HANDLER_::/g, commandHandler);\n\n // Registration\n const componentRegistration = registerTemplate.replace(\n /::_REGISTER_CUSTOM_COMMAND_HANDLER_::/g,\n registerCommandHandler,\n );\n\n // Final output\n const replaceContent = function (template: string): string {\n return template\n .replace(/::_COMPONENT_PROP_OBJECT_TYPES_::/g, propObjectTypes)\n .replace(/::_COMPONENT_PROP_TYPES_::/g, propsTemplate)\n .replace(/::_COMPONENT_EVENT_EMITTER_::/g, eventEmitter)\n .replace(/::_BASE_COMPONENT_STRUCT_::/g, baseType)\n .replace(/::_COMPONENT_REGISTRATION_::/g, componentRegistration)\n .replace(/::_EVENT_EMITTER_NAME_::/g, eventEmitterName)\n .replace(/::_PROPS_NAME_::/g, propsName)\n .replace(/::_COMPONENT_NAME_::/g, componentName)\n .replace(/::_PROP_INITIALIZERS_::/g, propInitializers)\n .replace(/::_PROPS_FIELDS_::/g, propsFields)\n .replace(/::_NAMESPACE_::/g, namespace)\n .replace(/\\n\\n\\n+/g, '\\n\\n');\n };\n\n files.set(`${componentName}.g.h`, replaceContent(fileTemplate));\n }\n }\n\n return files;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GenerateComponentWindows.js","sourceRoot":"","sources":["../../src/generators/GenerateComponentWindows.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n SchemaType,\n EventTypeAnnotation,\n PropTypeAnnotation,\n ObjectTypeAnnotation,\n CommandParamTypeAnnotation,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {getAliasCppName, setPreferredModuleName} from './AliasManaging';\nimport {\n translateComponentPropsFieldType,\n translateComponentEventType,\n translateCommandParamType,\n} from './PropObjectTypes';\nimport type {CppStringTypes} from './ObjectTypes';\nimport type {AliasMap} from './AliasManaging';\n\nexport type {CppStringTypes} from './ObjectTypes';\n\ntype FilesOutput = Map<string, string>;\n\nconst headerTemplate = `/*\n * This file is auto-generated from ::_COMPONENT_NAME_::NativeComponent spec file in flow / TypeScript.\n */\n// clang-format off\n#pragma once\n\n#include <NativeModules.h>\n\n#ifdef RNW_NEW_ARCH\n#include <JSValueComposition.h>\n\n#include <winrt/Microsoft.ReactNative.Composition.h>\n#include <winrt/Microsoft.UI.Composition.h>\n#endif // #ifdef RNW_NEW_ARCH`;\n\nconst propsTemplate = `REACT_STRUCT(::_PROPS_NAME_::)\nstruct ::_PROPS_NAME_:: : winrt::implements<::_PROPS_NAME_::, winrt::Microsoft::ReactNative::IComponentProps> {\n ::_PROPS_NAME_::(winrt::Microsoft::ReactNative::ViewProps props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom)\n : ViewProps(props)\n {\n if (cloneFrom) {\n auto cloneFromProps = cloneFrom.as<::_PROPS_NAME_::>();\n::_PROP_INITIALIZERS_:: \n }\n }\n\n void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept {\n winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this);\n }\n\n::_PROPS_FIELDS_::\n const winrt::Microsoft::ReactNative::ViewProps ViewProps;\n};`;\n\nconst propsObjectTemplate = `REACT_STRUCT(::_OBJECT_NAME_::)\nstruct ::_OBJECT_NAME_:: {\n::_OBJECT_FIELDS_::};\n`;\nconst eventsObjectTemplate = `REACT_STRUCT(::_OBJECT_NAME_::)\nstruct ::_OBJECT_NAME_:: {\n::_OBJECT_FIELDS_::};\n`;\n\nconst eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &value) const {\n m_eventEmitter.DispatchEvent(L\"::_EVENT_NAME_NO_ON_::\", [value](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {\n winrt::Microsoft::ReactNative::WriteValue(writer, value);\n });\n }`;\n\nconst eventEmitterTemplate = `::_COMPONENT_EVENT_OBJECT_TYPES_::\n\nstruct ::_EVENT_EMITTER_NAME_:: {\n ::_EVENT_EMITTER_NAME_::(const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter)\n : m_eventEmitter(eventEmitter) {}\n\n::_EVENT_EMITTER_USINGS_::\n\n::_EVENT_EMITTER_METHODS_::\n\n private:\n winrt::Microsoft::ReactNative::EventEmitter m_eventEmitter{nullptr};\n};`;\n\nconst baseStructTemplate = `\ntemplate<typename TUserData>\nstruct Base::_COMPONENT_NAME_:: {\n\n virtual void UpdateProps(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::com_ptr<::_COMPONENT_NAME_::Props> &newProps,\n const winrt::com_ptr<::_COMPONENT_NAME_::Props> &/*oldProps*/) noexcept {\n m_props = newProps;\n }\n\n // UpdateLayoutMetrics will only be called if this method is overridden\n virtual void UpdateLayoutMetrics(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::LayoutMetrics &/*newLayoutMetrics*/,\n const winrt::Microsoft::ReactNative::LayoutMetrics &/*oldLayoutMetrics*/) noexcept {\n }\n\n // UpdateState will only be called if this method is overridden\n virtual void UpdateState(\n const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::IComponentState &/*newState*/) noexcept {\n }\n\n virtual void UpdateEventEmitter(const std::shared_ptr<::_COMPONENT_NAME_::EventEmitter> &eventEmitter) noexcept {\n m_eventEmitter = eventEmitter;\n }\n\n // MountChildComponentView will only be called if this method is overridden\n virtual void MountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &/*args*/) noexcept {\n }\n\n // UnmountChildComponentView will only be called if this method is overridden\n virtual void UnmountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &/*args*/) noexcept {\n }\n\n // Initialize will only be called if this method is overridden\n virtual void Initialize(const winrt::Microsoft::ReactNative::ComponentView &/*view*/) noexcept {\n }\n\n // CreateVisual will only be called if this method is overridden\n virtual winrt::Microsoft::UI::Composition::Visual CreateVisual(const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n return view.as<winrt::Microsoft::ReactNative::Composition::ComponentView>().Compositor().CreateSpriteVisual();\n }\n\n // FinalizeUpdate will only be called if this method is overridden\n virtual void FinalizeUpdate(const winrt::Microsoft::ReactNative::ComponentView &/*view*/,\n winrt::Microsoft::ReactNative::ComponentViewUpdateMask /*mask*/) noexcept {\n }\n\n // CreateAutomationPeer will only be called if this method is overridden\n virtual winrt::Windows::Foundation::IInspectable CreateAutomationPeer(const winrt::Microsoft::ReactNative::ComponentView & /*view*/,\n const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& /*args*/) noexcept {\n return nullptr;\n }\n\n::_COMPONENT_VIEW_COMMAND_HANDLERS_::\n\n ::_COMPONENT_VIEW_COMMAND_HANDLER_::\n\n const std::shared_ptr<::_COMPONENT_NAME_::EventEmitter>& EventEmitter() const { return m_eventEmitter; }\n const winrt::com_ptr<::_COMPONENT_NAME_::Props>& Props() const { return m_props; }\n\nprivate:\n winrt::com_ptr<::_COMPONENT_NAME_::Props> m_props;\n std::shared_ptr<::_COMPONENT_NAME_::EventEmitter> m_eventEmitter;\n};\n`;\n\nconst registerTemplate = `\ntemplate <typename TUserData>\nvoid Register::_COMPONENT_NAME_::NativeComponent(\n winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder,\n std::function<void(const winrt::Microsoft::ReactNative::Composition::IReactCompositionViewComponentBuilder&)> builderCallback) noexcept {\n packageBuilder.as<winrt::Microsoft::ReactNative::IReactPackageBuilderFabric>().AddViewComponent(\n L\"::_COMPONENT_NAME_::\", [builderCallback](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept {\n auto compBuilder = builder.as<winrt::Microsoft::ReactNative::Composition::IReactCompositionViewComponentBuilder>();\n\n builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props,\n const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) noexcept {\n return winrt::make<::_COMPONENT_NAME_::Props>(props, cloneFrom); \n });\n\n builder.SetUpdatePropsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::IComponentProps &newProps,\n const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateProps(view, newProps ? newProps.as<::_COMPONENT_NAME_::Props>() : nullptr, oldProps ? oldProps.as<::_COMPONENT_NAME_::Props>() : nullptr);\n });\n\n compBuilder.SetUpdateLayoutMetricsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::LayoutMetrics &newLayoutMetrics,\n const winrt::Microsoft::ReactNative::LayoutMetrics &oldLayoutMetrics) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateLayoutMetrics(view, newLayoutMetrics, oldLayoutMetrics);\n });\n\n builder.SetUpdateEventEmitterHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateEventEmitter(std::make_shared<::_COMPONENT_NAME_::EventEmitter>(eventEmitter));\n });\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &Base::_COMPONENT_NAME_::<TUserData>::FinalizeUpdate) {\n builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->FinalizeUpdate(view, mask);\n });\n } \n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &Base::_COMPONENT_NAME_::<TUserData>::UpdateState) {\n builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->UpdateState(view, newState);\n });\n }\n\n::_REGISTER_CUSTOM_COMMAND_HANDLER_::\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::MountChildComponentView) {\n builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->MountChildComponentView(view, args);\n });\n }\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::UnmountChildComponentView) {\n builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->UnmountChildComponentView(view, args);\n });\n }\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateAutomationPeer != &Base::_COMPONENT_NAME_::<TUserData>::CreateAutomationPeer) {\n builder.SetCreateAutomationPeerHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->CreateAutomationPeer(view, args);\n });\n } \n\n compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n auto userData = winrt::make_self<TUserData>();\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {\n userData->Initialize(view);\n }\n view.UserData(*userData);\n });\n\n if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &Base::_COMPONENT_NAME_::<TUserData>::CreateVisual) {\n compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {\n auto userData = view.UserData().as<TUserData>();\n return userData->CreateVisual(view);\n });\n }\n\n // Allow app to further customize the builder\n if (builderCallback) {\n builderCallback(compBuilder);\n }\n });\n}\n`;\n\nconst fileTemplate = `\n${headerTemplate}\n\n#ifdef RNW_NEW_ARCH\n\nnamespace ::_NAMESPACE_:: {\n\n::_COMPONENT_PROP_OBJECT_TYPES_::\n::_COMPONENT_PROP_TYPES_::\n\n::_COMPONENT_EVENT_EMITTER_::\n\n::_BASE_COMPONENT_STRUCT_::\n\n::_COMPONENT_REGISTRATION_::\n} // namespace ::_NAMESPACE_::\n\n#endif // #ifdef RNW_NEW_ARCH\n`;\n\nfunction capitalizeFirstLetter(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function createComponentGenerator({\n namespace,\n cppStringType,\n}: {\n namespace: string;\n cppStringType: CppStringTypes;\n}) {\n return (\n _libraryName: string,\n schema: SchemaType,\n _moduleSpecName: string,\n ): FilesOutput => {\n const files = new Map<string, string>();\n\n const cppCodegenOptions = {cppStringType};\n\n for (const componentName of Object.keys(schema.modules)) {\n const component = schema.modules[componentName];\n setPreferredModuleName(componentName);\n\n if (component.type === 'Component') {\n console.log(`Generating ${componentName}.g.h`);\n\n const componentShape = component.components[componentName];\n\n componentShape.extendsProps.forEach(propsBaseType => {\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n propsBaseType.type !== 'ReactNativeBuiltInType' ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n propsBaseType.knownTypeName !== 'ReactNativeCoreViewProps'\n ) {\n throw new Error(\n 'Currently only supports props extending from ViewProps',\n );\n }\n });\n\n // Props\n const propObjectAliases: AliasMap<\n ObjectTypeAnnotation<PropTypeAnnotation>\n > = {types: {}, jobs: []};\n const propsName = `${componentName}Props`;\n const propsFields = componentShape.props\n .map(prop => {\n const propType = translateComponentPropsFieldType(\n prop.typeAnnotation,\n propObjectAliases,\n `${propsName}_${prop.name}`,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${prop.name})\\n ${\n prop.optional && !propType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${propType.type}>`\n : propType.type\n } ${prop.name}${propType.initializer};\\n`;\n })\n .join('\\n');\n\n const propInitializers = componentShape.props\n .map(prop => {\n return ` ${prop.name} = cloneFromProps->${prop.name};`;\n })\n .join('\\n');\n\n const propObjectTypes = propObjectAliases.jobs\n .map(propObjectTypeName => {\n const propObjectType = propObjectAliases.types[propObjectTypeName]!;\n const propsObjectFields = propObjectType.properties\n .map(property => {\n const propType = translateComponentPropsFieldType(\n property.typeAnnotation,\n propObjectAliases,\n `${propsName}_${property.name}`,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${property.name})\\n ${\n property.optional &&\n !propType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${propType.type}>`\n : propType.type\n } ${property.name}${propType.initializer};\\n`;\n })\n .join('\\n');\n\n return propsObjectTemplate\n .replace(\n /::_OBJECT_NAME_::/g,\n getAliasCppName(propObjectTypeName),\n )\n .replace(/::_OBJECT_FIELDS_::/g, propsObjectFields);\n })\n .join('\\n');\n\n // Events\n const eventObjectAliases: AliasMap<\n ObjectTypeAnnotation<EventTypeAnnotation>\n > = {types: {}, jobs: []};\n const eventEmitterName = `${componentName}EventEmitter`;\n const eventEmitterMethods = componentShape.events\n .filter(event => event.typeAnnotation.argument)\n .map(event => {\n if (event.typeAnnotation.argument?.baseTypes) {\n throw new Error(\n 'Events with base type arguments not currently supported',\n );\n }\n\n // Called to collect the eventObjectAliases\n translateComponentEventType(\n event.typeAnnotation.argument!,\n eventObjectAliases,\n `${event.name}`,\n cppCodegenOptions,\n );\n\n // onSomething -> something\n let eventNameLower = event.name.replace('on', '');\n eventNameLower =\n eventNameLower[0].toLowerCase() + eventNameLower.slice(1);\n\n return eventEmitterMethodTemplate\n .replace(/::_EVENT_NAME_::/g, event.name)\n .replace(/::_EVENT_NAME_NO_ON_::/g, eventNameLower)\n .replace(\n /::_EVENT_OBJECT_TYPE_::/g,\n event.name.replace('on', 'On'),\n );\n })\n .join('\\n\\n');\n\n const eventObjects = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n const eventObjectType =\n eventObjectAliases.types[eventObjectTypeName]!;\n const eventObjectFields = eventObjectType.properties\n .map(property => {\n const eventPropType = translateComponentEventType(\n property.typeAnnotation,\n eventObjectAliases,\n eventObjectTypeName,\n cppCodegenOptions,\n );\n return ` REACT_FIELD(${property.name})\\n ${\n property.optional &&\n !eventPropType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${eventPropType.type}>`\n : eventPropType.type\n } ${property.name}${eventPropType.initializer};\\n`;\n })\n .join('\\n');\n return eventsObjectTemplate\n .replace(\n /::_OBJECT_NAME_::/g,\n `${componentName}_${eventObjectTypeName.replace('on', 'On')}`,\n )\n .replace(/::_OBJECT_FIELDS_::/g, eventObjectFields);\n })\n .join('\\n');\n\n const eventObjectUsings = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n return ` using ${eventObjectTypeName.replace(\n 'on',\n 'On',\n )} = ${componentName}_${eventObjectTypeName.replace('on', 'On')};`;\n })\n .join('\\n');\n\n const eventEmitter = eventEmitterTemplate\n .replace(/::_COMPONENT_EVENT_OBJECT_TYPES_::/g, eventObjects)\n .replace(/::_EVENT_EMITTER_METHODS_::/g, eventEmitterMethods)\n .replace(/::_EVENT_EMITTER_USINGS_::/g, eventObjectUsings);\n\n // Commands\n const commandAliases: AliasMap<\n ObjectTypeAnnotation<CommandParamTypeAnnotation>\n > = {types: {}, jobs: []};\n const hasAnyCommands = componentShape.commands.length !== 0;\n const commandHandlers = hasAnyCommands\n ? componentShape.commands\n .map(command => {\n const commandArgs = command.typeAnnotation.params\n .map(param => {\n const commandArgType = translateCommandParamType(\n param.typeAnnotation,\n commandAliases,\n `${componentName}_${command.name}`,\n cppCodegenOptions,\n );\n return `${\n param.optional &&\n !commandArgType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${commandArgType.type}>`\n : commandArgType.type\n } ${param.name}`;\n })\n .join(', ');\n\n return ` // You must provide an implementation of this method to handle the \"${\n command.name\n }\" command\n virtual void Handle${capitalizeFirstLetter(\n command.name,\n )}Command(${commandArgs}) noexcept = 0;`;\n })\n .join('\\n\\n')\n : '';\n\n const commandHandler = hasAnyCommands\n ? `void HandleCommand(const winrt::Microsoft::ReactNative::ComponentView &view, const winrt::Microsoft::ReactNative::HandleCommandArgs& args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n auto commandName = args.CommandName();\n${componentShape.commands\n .map(command => {\n const commaSeparatedCommandArgs = command.typeAnnotation.params\n .map(param => param.name)\n .join(', ');\n return ` if (commandName == L\"${command.name}\") {\n${\n command.typeAnnotation.params.length !== 0\n ? ` ${command.typeAnnotation.params\n .map(param => {\n const commandArgType = translateCommandParamType(\n param.typeAnnotation,\n commandAliases,\n `${componentName}_${command.name}`,\n cppCodegenOptions,\n );\n return `${\n param.optional &&\n !commandArgType.alreadySupportsOptionalOrHasDefault\n ? `std::optional<${commandArgType.type}>`\n : commandArgType.type\n } ${param.name};`;\n })\n .join('\\n')}\n winrt::Microsoft::ReactNative::ReadArgs(args.CommandArgs(), ${commaSeparatedCommandArgs});`\n : ''\n}\n userData->Handle${capitalizeFirstLetter(\n command.name,\n )}Command(${commaSeparatedCommandArgs});\n return;\n }`;\n })\n .join('\\n\\n')}\n }`\n : '';\n\n const registerCommandHandler = hasAnyCommands\n ? ` builder.SetCustomCommandHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,\n const winrt::Microsoft::ReactNative::HandleCommandArgs& args) noexcept {\n auto userData = view.UserData().as<TUserData>();\n userData->HandleCommand(view, args);\n });`\n : '';\n\n const baseType = baseStructTemplate\n .replace(/::_COMPONENT_VIEW_COMMAND_HANDLERS_::/g, commandHandlers)\n .replace(/::_COMPONENT_VIEW_COMMAND_HANDLER_::/g, commandHandler);\n\n // Registration\n const componentRegistration = registerTemplate.replace(\n /::_REGISTER_CUSTOM_COMMAND_HANDLER_::/g,\n registerCommandHandler,\n );\n\n // Final output\n const replaceContent = function (template: string): string {\n return template\n .replace(/::_COMPONENT_PROP_OBJECT_TYPES_::/g, propObjectTypes)\n .replace(/::_COMPONENT_PROP_TYPES_::/g, propsTemplate)\n .replace(/::_COMPONENT_EVENT_EMITTER_::/g, eventEmitter)\n .replace(/::_BASE_COMPONENT_STRUCT_::/g, baseType)\n .replace(/::_COMPONENT_REGISTRATION_::/g, componentRegistration)\n .replace(/::_EVENT_EMITTER_NAME_::/g, eventEmitterName)\n .replace(/::_PROPS_NAME_::/g, propsName)\n .replace(/::_COMPONENT_NAME_::/g, componentName)\n .replace(/::_PROP_INITIALIZERS_::/g, propInitializers)\n .replace(/::_PROPS_FIELDS_::/g, propsFields)\n .replace(/::_NAMESPACE_::/g, namespace)\n .replace(/\\n\\n\\n+/g, '\\n\\n');\n };\n\n files.set(`${componentName}.g.h`, replaceContent(fileTemplate));\n }\n }\n\n return files;\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function generate(libraryName: any, schema: any, packageName: any, assumeNonnull: boolean | undefined, headerPrefix: any): Map<string, string>;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
const path = require('path');
|
|
12
|
+
// Load dependencies from @react-native/codegen
|
|
13
|
+
const rnPath = path.dirname(require.resolve('react-native/package.json'));
|
|
14
|
+
const rncodegenPath = path.dirname(require.resolve('@react-native/codegen/package.json', { paths: [rnPath] }));
|
|
15
|
+
const { unwrapNullable } = require(path.resolve(rncodegenPath, 'lib/parsers/parsers-commons'));
|
|
16
|
+
const { createAliasResolver, getModules } = require(path.resolve(rncodegenPath, 'lib/generators/modules/Utils'));
|
|
17
|
+
const HostFunctionTemplate = ({ hasteModuleName, methodName, returnTypeAnnotation, args, }) => {
|
|
18
|
+
const isNullable = returnTypeAnnotation.type === 'NullableTypeAnnotation';
|
|
19
|
+
const isVoid = returnTypeAnnotation.type === 'VoidTypeAnnotation';
|
|
20
|
+
const methodCallArgs = [' rt', ...args].join(',\n ');
|
|
21
|
+
const methodCall = `static_cast<${hasteModuleName}CxxSpecJSI *>(&turboModule)->${methodName}(\n${methodCallArgs}\n )`;
|
|
22
|
+
return `static jsi::Value __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {${isVoid ? `\n ${methodCall};` : isNullable ? `\n auto result = ${methodCall};` : ''}
|
|
23
|
+
return ${isVoid ? 'jsi::Value::undefined()' : isNullable ? 'result ? jsi::Value(std::move(*result)) : jsi::Value::null()' : methodCall};
|
|
24
|
+
}`;
|
|
25
|
+
};
|
|
26
|
+
const ModuleTemplate = ({ hasteModuleName, hostFunctions, moduleName, methods, }) => {
|
|
27
|
+
return `${hostFunctions.join('\n')}
|
|
28
|
+
|
|
29
|
+
${hasteModuleName}CxxSpecJSI::${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
|
|
30
|
+
: TurboModule("${moduleName}", jsInvoker) {
|
|
31
|
+
${methods
|
|
32
|
+
.map(({ methodName, paramCount }) => {
|
|
33
|
+
return ` methodMap_["${methodName}"] = MethodMetadata {${paramCount}, __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}};`;
|
|
34
|
+
})
|
|
35
|
+
.join('\n')}
|
|
36
|
+
}`;
|
|
37
|
+
};
|
|
38
|
+
const FileTemplate = ({ libraryName, modules }) => {
|
|
39
|
+
return `/**
|
|
40
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
41
|
+
*
|
|
42
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
43
|
+
* once the code is regenerated.
|
|
44
|
+
*
|
|
45
|
+
* ${'@'}generated by codegen project: GenerateModuleCpp.js
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
#include "${libraryName}JSI.h"
|
|
49
|
+
|
|
50
|
+
namespace facebook::react {
|
|
51
|
+
|
|
52
|
+
${modules}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
} // namespace facebook::react
|
|
56
|
+
`;
|
|
57
|
+
};
|
|
58
|
+
function serializeArg(moduleName, arg, index, resolveAlias, enumMap) {
|
|
59
|
+
const { typeAnnotation: nullableTypeAnnotation, optional } = arg;
|
|
60
|
+
const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
|
|
61
|
+
let realTypeAnnotation = typeAnnotation;
|
|
62
|
+
if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
63
|
+
realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
|
|
64
|
+
}
|
|
65
|
+
function wrap(callback) {
|
|
66
|
+
const val = `args[${index}]`;
|
|
67
|
+
const expression = callback(val);
|
|
68
|
+
// param?: T
|
|
69
|
+
if (optional && !nullable) {
|
|
70
|
+
// throw new Error('are we hitting this case? ' + moduleName);
|
|
71
|
+
return `count <= ${index} || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;
|
|
72
|
+
}
|
|
73
|
+
// param: ?T
|
|
74
|
+
// param?: ?T
|
|
75
|
+
if (nullable || optional) {
|
|
76
|
+
return `count <= ${index} || ${val}.isNull() || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;
|
|
77
|
+
}
|
|
78
|
+
// param: T
|
|
79
|
+
//return `count <= ${index} ? throw jsi::JSError(rt, "Expected argument in position ${index} to be passed") : ${expression}`;
|
|
80
|
+
//Windows #15545
|
|
81
|
+
return `(count > ${index} || (throw jsi::JSError(rt, "Expected argument in position ${index} to be passed"), false), ${expression})`;
|
|
82
|
+
//Windows
|
|
83
|
+
}
|
|
84
|
+
switch (realTypeAnnotation.type) {
|
|
85
|
+
case 'ReservedTypeAnnotation':
|
|
86
|
+
switch (realTypeAnnotation.name) {
|
|
87
|
+
case 'RootTag':
|
|
88
|
+
return wrap(val => `${val}.asNumber()`);
|
|
89
|
+
default:
|
|
90
|
+
realTypeAnnotation.name;
|
|
91
|
+
throw new Error(`Unknown prop type for "${arg.name}, found: ${realTypeAnnotation.name}"`);
|
|
92
|
+
}
|
|
93
|
+
case 'StringTypeAnnotation':
|
|
94
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
95
|
+
case 'StringLiteralTypeAnnotation':
|
|
96
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
97
|
+
case 'StringLiteralUnionTypeAnnotation':
|
|
98
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
99
|
+
case 'BooleanTypeAnnotation':
|
|
100
|
+
return wrap(val => `${val}.asBool()`);
|
|
101
|
+
case 'EnumDeclaration':
|
|
102
|
+
switch (realTypeAnnotation.memberType) {
|
|
103
|
+
case 'NumberTypeAnnotation':
|
|
104
|
+
return wrap(val => `${val}.asNumber()`);
|
|
105
|
+
case 'StringTypeAnnotation':
|
|
106
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
107
|
+
default:
|
|
108
|
+
throw new Error(`Unknown enum type for "${arg.name}, found: ${realTypeAnnotation.type}"`);
|
|
109
|
+
}
|
|
110
|
+
case 'NumberTypeAnnotation':
|
|
111
|
+
return wrap(val => `${val}.asNumber()`);
|
|
112
|
+
case 'FloatTypeAnnotation':
|
|
113
|
+
return wrap(val => `${val}.asNumber()`);
|
|
114
|
+
case 'DoubleTypeAnnotation':
|
|
115
|
+
return wrap(val => `${val}.asNumber()`);
|
|
116
|
+
case 'Int32TypeAnnotation':
|
|
117
|
+
return wrap(val => `${val}.asNumber()`);
|
|
118
|
+
case 'NumberLiteralTypeAnnotation':
|
|
119
|
+
return wrap(val => `${val}.asNumber()`);
|
|
120
|
+
case 'ArrayTypeAnnotation':
|
|
121
|
+
return wrap(val => `${val}.asObject(rt).asArray(rt)`);
|
|
122
|
+
case 'FunctionTypeAnnotation':
|
|
123
|
+
return wrap(val => `${val}.asObject(rt).asFunction(rt)`);
|
|
124
|
+
case 'GenericObjectTypeAnnotation':
|
|
125
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
126
|
+
case 'UnionTypeAnnotation':
|
|
127
|
+
switch (typeAnnotation.memberType) {
|
|
128
|
+
case 'NumberTypeAnnotation':
|
|
129
|
+
return wrap(val => `${val}.asNumber()`);
|
|
130
|
+
case 'ObjectTypeAnnotation':
|
|
131
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
132
|
+
case 'StringTypeAnnotation':
|
|
133
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
134
|
+
default:
|
|
135
|
+
throw new Error(`Unsupported union member type for param "${arg.name}, found: ${realTypeAnnotation.memberType}"`);
|
|
136
|
+
}
|
|
137
|
+
case 'ObjectTypeAnnotation':
|
|
138
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
139
|
+
case 'MixedTypeAnnotation':
|
|
140
|
+
return wrap(val => `jsi::Value(rt, ${val})`);
|
|
141
|
+
default:
|
|
142
|
+
realTypeAnnotation.type;
|
|
143
|
+
throw new Error(`Unknown prop type for "${arg.name}, found: ${realTypeAnnotation.type}"`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function serializePropertyIntoHostFunction(moduleName, hasteModuleName, property, resolveAlias, enumMap) {
|
|
147
|
+
const [propertyTypeAnnotation] = unwrapNullable(property.typeAnnotation);
|
|
148
|
+
return HostFunctionTemplate({
|
|
149
|
+
hasteModuleName,
|
|
150
|
+
methodName: property.name,
|
|
151
|
+
returnTypeAnnotation: propertyTypeAnnotation.returnTypeAnnotation,
|
|
152
|
+
args: propertyTypeAnnotation.params.map((p, i) => serializeArg(moduleName, p, i, resolveAlias, enumMap)),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
module.exports = {
|
|
156
|
+
generate(libraryName, schema, packageName, assumeNonnull = false, headerPrefix) {
|
|
157
|
+
const nativeModules = getModules(schema);
|
|
158
|
+
const modules = Object.keys(nativeModules)
|
|
159
|
+
.map(hasteModuleName => {
|
|
160
|
+
const nativeModule = nativeModules[hasteModuleName];
|
|
161
|
+
const { aliasMap, enumMap, spec: { methods }, moduleName, } = nativeModule;
|
|
162
|
+
const resolveAlias = createAliasResolver(aliasMap);
|
|
163
|
+
const hostFunctions = methods.map(property => serializePropertyIntoHostFunction(moduleName, hasteModuleName, property, resolveAlias, enumMap));
|
|
164
|
+
return ModuleTemplate({
|
|
165
|
+
hasteModuleName,
|
|
166
|
+
hostFunctions,
|
|
167
|
+
moduleName,
|
|
168
|
+
methods: methods.map(({ name: propertyName, typeAnnotation: nullableTypeAnnotation }) => {
|
|
169
|
+
const [{ params }] = unwrapNullable(nullableTypeAnnotation);
|
|
170
|
+
return {
|
|
171
|
+
methodName: propertyName,
|
|
172
|
+
paramCount: params.length,
|
|
173
|
+
};
|
|
174
|
+
}),
|
|
175
|
+
});
|
|
176
|
+
})
|
|
177
|
+
.join('\n');
|
|
178
|
+
const fileName = `${libraryName}JSI-generated.cpp`;
|
|
179
|
+
const replacedTemplate = FileTemplate({
|
|
180
|
+
modules,
|
|
181
|
+
libraryName,
|
|
182
|
+
});
|
|
183
|
+
return new Map([[fileName, replacedTemplate]]);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=GenerateModuleCpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerateModuleCpp.js","sourceRoot":"","sources":["../../src/generators/GenerateModuleCpp.js"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n *\n * @format\n */\n\n'use strict';\n\nconst path = require('path');\n\n// Load dependencies from @react-native/codegen\nconst rnPath = path.dirname(require.resolve('react-native/package.json'));\nconst rncodegenPath = path.dirname(\n require.resolve('@react-native/codegen/package.json', {paths: [rnPath]}),\n);\n\nconst {unwrapNullable} = require(\n path.resolve(rncodegenPath, 'lib/parsers/parsers-commons'),\n);\nconst {createAliasResolver, getModules} = require(\n path.resolve(rncodegenPath, 'lib/generators/modules/Utils'),\n);\nconst HostFunctionTemplate = ({\n hasteModuleName,\n methodName,\n returnTypeAnnotation,\n args,\n}) => {\n const isNullable = returnTypeAnnotation.type === 'NullableTypeAnnotation';\n const isVoid = returnTypeAnnotation.type === 'VoidTypeAnnotation';\n const methodCallArgs = [' rt', ...args].join(',\\n ');\n const methodCall = `static_cast<${hasteModuleName}CxxSpecJSI *>(&turboModule)->${methodName}(\\n${methodCallArgs}\\n )`;\n return `static jsi::Value __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {${isVoid ? `\\n ${methodCall};` : isNullable ? `\\n auto result = ${methodCall};` : ''}\n return ${isVoid ? 'jsi::Value::undefined()' : isNullable ? 'result ? jsi::Value(std::move(*result)) : jsi::Value::null()' : methodCall};\n}`;\n};\nconst ModuleTemplate = ({\n hasteModuleName,\n hostFunctions,\n moduleName,\n methods,\n}) => {\n return `${hostFunctions.join('\\n')}\n\n${hasteModuleName}CxxSpecJSI::${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)\n : TurboModule(\"${moduleName}\", jsInvoker) {\n${methods\n .map(({methodName, paramCount}) => {\n return ` methodMap_[\"${methodName}\"] = MethodMetadata {${paramCount}, __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}};`;\n })\n .join('\\n')}\n}`;\n};\nconst FileTemplate = ({libraryName, modules}) => {\n return `/**\n * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).\n *\n * Do not edit this file as changes may cause incorrect behavior and will be lost\n * once the code is regenerated.\n *\n * ${'@'}generated by codegen project: GenerateModuleCpp.js\n */\n\n#include \"${libraryName}JSI.h\"\n\nnamespace facebook::react {\n\n${modules}\n\n\n} // namespace facebook::react\n`;\n};\nfunction serializeArg(moduleName, arg, index, resolveAlias, enumMap) {\n const {typeAnnotation: nullableTypeAnnotation, optional} = arg;\n const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);\n let realTypeAnnotation = typeAnnotation;\n if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {\n realTypeAnnotation = resolveAlias(realTypeAnnotation.name);\n }\n function wrap(callback) {\n const val = `args[${index}]`;\n const expression = callback(val);\n\n // param?: T\n if (optional && !nullable) {\n // throw new Error('are we hitting this case? ' + moduleName);\n return `count <= ${index} || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;\n }\n\n // param: ?T\n // param?: ?T\n if (nullable || optional) {\n return `count <= ${index} || ${val}.isNull() || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;\n }\n\n // param: T\n //return `count <= ${index} ? throw jsi::JSError(rt, \"Expected argument in position ${index} to be passed\") : ${expression}`;\n //Windows #15545\n return `(count > ${index} || (throw jsi::JSError(rt, \"Expected argument in position ${index} to be passed\"), false), ${expression})`;\n //Windows\n }\n switch (realTypeAnnotation.type) {\n case 'ReservedTypeAnnotation':\n switch (realTypeAnnotation.name) {\n case 'RootTag':\n return wrap(val => `${val}.asNumber()`);\n default:\n realTypeAnnotation.name;\n throw new Error(\n `Unknown prop type for \"${arg.name}, found: ${realTypeAnnotation.name}\"`,\n );\n }\n case 'StringTypeAnnotation':\n return wrap(val => `${val}.asString(rt)`);\n case 'StringLiteralTypeAnnotation':\n return wrap(val => `${val}.asString(rt)`);\n case 'StringLiteralUnionTypeAnnotation':\n return wrap(val => `${val}.asString(rt)`);\n case 'BooleanTypeAnnotation':\n return wrap(val => `${val}.asBool()`);\n case 'EnumDeclaration':\n switch (realTypeAnnotation.memberType) {\n case 'NumberTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'StringTypeAnnotation':\n return wrap(val => `${val}.asString(rt)`);\n default:\n throw new Error(\n `Unknown enum type for \"${arg.name}, found: ${realTypeAnnotation.type}\"`,\n );\n }\n case 'NumberTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'FloatTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'DoubleTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'Int32TypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'NumberLiteralTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'ArrayTypeAnnotation':\n return wrap(val => `${val}.asObject(rt).asArray(rt)`);\n case 'FunctionTypeAnnotation':\n return wrap(val => `${val}.asObject(rt).asFunction(rt)`);\n case 'GenericObjectTypeAnnotation':\n return wrap(val => `${val}.asObject(rt)`);\n case 'UnionTypeAnnotation':\n switch (typeAnnotation.memberType) {\n case 'NumberTypeAnnotation':\n return wrap(val => `${val}.asNumber()`);\n case 'ObjectTypeAnnotation':\n return wrap(val => `${val}.asObject(rt)`);\n case 'StringTypeAnnotation':\n return wrap(val => `${val}.asString(rt)`);\n default:\n throw new Error(\n `Unsupported union member type for param \"${arg.name}, found: ${realTypeAnnotation.memberType}\"`,\n );\n }\n case 'ObjectTypeAnnotation':\n return wrap(val => `${val}.asObject(rt)`);\n case 'MixedTypeAnnotation':\n return wrap(val => `jsi::Value(rt, ${val})`);\n default:\n realTypeAnnotation.type;\n throw new Error(\n `Unknown prop type for \"${arg.name}, found: ${realTypeAnnotation.type}\"`,\n );\n }\n}\nfunction serializePropertyIntoHostFunction(\n moduleName,\n hasteModuleName,\n property,\n resolveAlias,\n enumMap,\n) {\n const [propertyTypeAnnotation] = unwrapNullable(property.typeAnnotation);\n return HostFunctionTemplate({\n hasteModuleName,\n methodName: property.name,\n returnTypeAnnotation: propertyTypeAnnotation.returnTypeAnnotation,\n args: propertyTypeAnnotation.params.map((p, i) =>\n serializeArg(moduleName, p, i, resolveAlias, enumMap),\n ),\n });\n}\nmodule.exports = {\n generate(\n libraryName,\n schema,\n packageName,\n assumeNonnull = false,\n headerPrefix,\n ) {\n const nativeModules = getModules(schema);\n const modules = Object.keys(nativeModules)\n .map(hasteModuleName => {\n const nativeModule = nativeModules[hasteModuleName];\n const {\n aliasMap,\n enumMap,\n spec: {methods},\n moduleName,\n } = nativeModule;\n const resolveAlias = createAliasResolver(aliasMap);\n const hostFunctions = methods.map(property =>\n serializePropertyIntoHostFunction(\n moduleName,\n hasteModuleName,\n property,\n resolveAlias,\n enumMap,\n ),\n );\n return ModuleTemplate({\n hasteModuleName,\n hostFunctions,\n moduleName,\n methods: methods.map(\n ({name: propertyName, typeAnnotation: nullableTypeAnnotation}) => {\n const [{params}] = unwrapNullable(nullableTypeAnnotation);\n return {\n methodName: propertyName,\n paramCount: params.length,\n };\n },\n ),\n });\n })\n .join('\\n');\n const fileName = `${libraryName}JSI-generated.cpp`;\n const replacedTemplate = FileTemplate({\n modules,\n libraryName,\n });\n return new Map([[fileName, replacedTemplate]]);\n },\n};\n"]}
|
package/lib-commonjs/index.js
CHANGED
|
@@ -150,7 +150,9 @@ function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes,
|
|
|
150
150
|
separateDataTypes,
|
|
151
151
|
});
|
|
152
152
|
const generateJsiModuleH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/modules/GenerateModuleH')).generate;
|
|
153
|
-
|
|
153
|
+
// Use local fixed version instead of upstream to fix x86 union padding issue
|
|
154
|
+
// with MixedTypeAnnotation. See GenerateModuleCpp.js for details.
|
|
155
|
+
const generateJsiModuleCpp = require('./generators/GenerateModuleCpp').generate;
|
|
154
156
|
const generatorPropsH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GeneratePropsH')).generate;
|
|
155
157
|
const generatorPropsCPP = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GeneratePropsCpp')).generate;
|
|
156
158
|
const generatorShadowNodeH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateShadowNodeH')).generate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport path from 'path';\nimport fs from '@react-native-windows/fs';\nimport globby from 'globby';\nimport type {CppStringTypes} from './generators/GenerateNM2';\nimport {createNM2Generator} from './generators/GenerateNM2';\nimport {createComponentGenerator} from './generators/GenerateComponentWindows';\nimport {\n generateTypeScript,\n setOptionalTurboModule,\n} from './generators/GenerateTypeScript';\nimport type {SchemaType} from '@react-native/codegen/lib/CodegenSchema';\nimport type {Parser} from '@react-native/codegen/lib/parsers/parser';\n\nexport type {CppStringTypes} from './generators/GenerateNM2';\n\n// Load @react-native/codegen from react-native\nconst rnPath = path.dirname(require.resolve('react-native/package.json'));\nconst rncodegenPath = path.dirname(\n require.resolve('@react-native/codegen/package.json', {paths: [rnPath]}),\n);\n\nfunction getParser(isTypeScript: boolean): Parser {\n if (isTypeScript) {\n const fp = require(path.resolve(\n rncodegenPath,\n 'lib/parsers/typescript/parser',\n ));\n return new fp.TypeScriptParser();\n } else {\n const fp = require(path.resolve(rncodegenPath, 'lib/parsers/flow/parser'));\n return new fp.FlowParser();\n }\n}\n\nconst schemaValidator = require(path.resolve(\n rncodegenPath,\n 'lib/SchemaValidator',\n));\n\nexport interface SharedOptions {\n libraryName: string;\n methodOnly: boolean;\n modulesCxx: boolean;\n modulesTypeScriptTypes: boolean;\n modulesWindows: boolean;\n componentsWindows: boolean;\n internalComponents: boolean;\n namespace: string;\n outputDirectory: string;\n cppStringType: CppStringTypes;\n separateDataTypes: boolean;\n}\n\ninterface Options extends SharedOptions {\n moduleSpecName: string;\n schema: SchemaType;\n}\n\ninterface Config {\n generators: any[] /*Generators[]*/;\n test?: boolean;\n}\n\nfunction normalizeFileMap(\n map: Map<string, string>,\n outputDir: string,\n outMap: Map<string, string>,\n): void {\n for (const [fileName, contents] of map) {\n const location = path.join(outputDir, fileName);\n outMap.set(path.normalize(location), contents);\n }\n}\n\nfunction checkFilesForChanges(\n map: Map<string, string>,\n outputDir: string,\n): boolean {\n let hasChanges = false;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n const allExistingFiles = globby\n .sync([`${globbyDir}/**`, `${globbyDir}/**/.*`], {absolute: true})\n .map(_ => path.normalize(_));\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n\n if (\n allExistingFiles.length !== allGeneratedFiles.length ||\n !allGeneratedFiles.every(filepath =>\n allExistingFiles.includes(\n path.normalize(path.resolve(process.cwd(), filepath)),\n ),\n )\n )\n return true;\n\n for (const [fileName, contents] of map) {\n if (!fs.existsSync(fileName)) {\n hasChanges = true;\n continue;\n }\n\n const currentContents = fs.readFileSync(fileName, 'utf8');\n if (currentContents !== contents) {\n console.log(`- ${fileName} has changed`);\n hasChanges = true;\n continue;\n }\n }\n\n return hasChanges;\n}\n\nfunction writeMapToFiles(map: Map<string, string>, outputDir: string) {\n let success = true;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n\n // This ensures that we delete any generated files from modules that have been deleted\n const allExistingFiles = globby.sync(\n [`${globbyDir}/**`, `${globbyDir}/**/.*`],\n {absolute: true},\n );\n\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n allExistingFiles.forEach(existingFile => {\n if (!allGeneratedFiles.includes(path.normalize(existingFile))) {\n console.log('Deleting ', existingFile);\n fs.unlinkSync(existingFile);\n }\n });\n\n for (const [fileName, contents] of map) {\n try {\n fs.mkdirSync(path.dirname(fileName), {recursive: true});\n\n if (fs.existsSync(fileName)) {\n const currentContents = fs.readFileSync(fileName, 'utf8');\n // Don't update the files if there are no changes as this breaks incremental builds\n if (currentContents === contents) {\n continue;\n }\n }\n\n console.log('Writing ', fileName);\n fs.writeFileSync(fileName, contents);\n } catch (error) {\n success = false;\n console.error(`Failed to write ${fileName} to ${fileName}`, error);\n }\n }\n\n return success;\n}\n\nexport function parseFile(filename: string): SchemaType {\n try {\n const isTypeScript =\n path.extname(filename) === '.ts' || path.extname(filename) === '.tsx';\n const contents = fs.readFileSync(filename, 'utf8');\n const schema = getParser(isTypeScript).parseString(contents, filename);\n // there will be at most one turbo module per file\n const moduleName = Object.keys(schema.modules)[0];\n if (moduleName) {\n const spec = schema.modules[moduleName];\n if (spec.type === 'NativeModule') {\n if (contents) {\n // This is a temporary implementation until such information is added to the schema in facebook/react-native\n if (contents.includes('TurboModuleRegistry.get<')) {\n setOptionalTurboModule(spec, true);\n } else if (contents.includes('TurboModuleRegistry.getEnforcing<')) {\n setOptionalTurboModule(spec, false);\n }\n }\n }\n }\n return schema;\n } catch (e) {\n if (e instanceof Error) {\n e.message = `(${filename}): ${e.message}`;\n }\n throw e;\n }\n}\n\nexport function combineSchemas(files: string[]): SchemaType {\n return files.reduce(\n (merged, filename) => {\n const contents = fs.readFileSync(filename, 'utf8');\n if (\n contents &&\n (/export\\s+default\\s+\\(?codegenNativeComponent</.test(contents) ||\n contents.includes('extends TurboModule'))\n ) {\n const schema = parseFile(filename);\n merged.modules = {...merged.modules, ...schema.modules};\n }\n return merged;\n },\n {modules: {}},\n );\n}\n\nexport function generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n internalComponents,\n componentsWindows,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n }: Options,\n {/*generators,*/ test}: Config,\n): boolean {\n schemaValidator.validate(schema);\n\n const componentOutputdir = path.join(\n outputDirectory,\n 'react/components',\n libraryName,\n );\n\n const generatedFiles = new Map<string, string>();\n\n generatedFiles.set(\n path.join(outputDirectory, '.clang-format'),\n 'DisableFormat: true\\nSortIncludes: false',\n );\n\n const generateNM2 = createNM2Generator({\n methodOnly,\n namespace,\n cppStringType,\n separateDataTypes,\n });\n\n const generateJsiModuleH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/modules/GenerateModuleH',\n )).generate;\n const generateJsiModuleCpp = require(path.resolve(\n rncodegenPath,\n 'lib/generators/modules/GenerateModuleCpp',\n )).generate;\n const generatorPropsH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsH',\n )).generate;\n const generatorPropsCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsCpp',\n )).generate;\n const generatorShadowNodeH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeH',\n )).generate;\n const generatorShadowNodeCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeCpp',\n )).generate;\n const generatorComponentDescriptorH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateComponentDescriptorH',\n )).generate;\n const generatorEventEmitterH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterH',\n )).generate;\n const generatorEventEmitterCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterCpp',\n )).generate;\n const generatorStateCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateCpp',\n )).generate;\n const generatorStateH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateH',\n )).generate;\n\n const moduleGenerators = [];\n\n if (modulesWindows) {\n moduleGenerators.push(generateNM2);\n }\n\n if (modulesCxx) {\n moduleGenerators.push(generateJsiModuleH);\n moduleGenerators.push(generateJsiModuleCpp);\n }\n\n if (modulesTypeScriptTypes) {\n moduleGenerators.push(generateTypeScript);\n }\n\n moduleGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, outputDirectory, generatedFiles);\n });\n\n if (\n Object.keys(schema.modules).some(\n moduleName => schema.modules[moduleName].type === 'Component',\n )\n ) {\n const componentGenerators = [];\n\n if (internalComponents) {\n componentGenerators.push(\n generatorComponentDescriptorH,\n generatorEventEmitterCPP,\n generatorEventEmitterH,\n generatorPropsCPP,\n generatorPropsH,\n generatorShadowNodeCPP,\n generatorShadowNodeH,\n generatorStateCPP,\n generatorStateH,\n );\n }\n\n if (componentsWindows) {\n const generateComponentWindows = createComponentGenerator({\n namespace,\n cppStringType,\n });\n\n componentGenerators.push(generateComponentWindows);\n }\n\n componentGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, componentOutputdir, generatedFiles);\n });\n }\n\n if (test === true) {\n return checkFilesForChanges(generatedFiles, outputDirectory);\n }\n\n return writeMapToFiles(generatedFiles, outputDirectory);\n}\n\nexport interface CodeGenOptions extends SharedOptions {\n file?: string;\n files?: string[];\n test: boolean;\n}\n\nexport function runCodeGen(options: CodeGenOptions): boolean {\n if (!options.file && !options.files)\n throw new Error('Must specify file or files option');\n\n const schema = options.file\n ? parseFile(options.file)\n : combineSchemas(globby.sync(options.files!));\n\n const libraryName = options.libraryName;\n const moduleSpecName = 'moduleSpecName';\n const {\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport path from 'path';\nimport fs from '@react-native-windows/fs';\nimport globby from 'globby';\nimport type {CppStringTypes} from './generators/GenerateNM2';\nimport {createNM2Generator} from './generators/GenerateNM2';\nimport {createComponentGenerator} from './generators/GenerateComponentWindows';\nimport {\n generateTypeScript,\n setOptionalTurboModule,\n} from './generators/GenerateTypeScript';\nimport type {SchemaType} from '@react-native/codegen/lib/CodegenSchema';\nimport type {Parser} from '@react-native/codegen/lib/parsers/parser';\n\nexport type {CppStringTypes} from './generators/GenerateNM2';\n\n// Load @react-native/codegen from react-native\nconst rnPath = path.dirname(require.resolve('react-native/package.json'));\nconst rncodegenPath = path.dirname(\n require.resolve('@react-native/codegen/package.json', {paths: [rnPath]}),\n);\n\nfunction getParser(isTypeScript: boolean): Parser {\n if (isTypeScript) {\n const fp = require(path.resolve(\n rncodegenPath,\n 'lib/parsers/typescript/parser',\n ));\n return new fp.TypeScriptParser();\n } else {\n const fp = require(path.resolve(rncodegenPath, 'lib/parsers/flow/parser'));\n return new fp.FlowParser();\n }\n}\n\nconst schemaValidator = require(path.resolve(\n rncodegenPath,\n 'lib/SchemaValidator',\n));\n\nexport interface SharedOptions {\n libraryName: string;\n methodOnly: boolean;\n modulesCxx: boolean;\n modulesTypeScriptTypes: boolean;\n modulesWindows: boolean;\n componentsWindows: boolean;\n internalComponents: boolean;\n namespace: string;\n outputDirectory: string;\n cppStringType: CppStringTypes;\n separateDataTypes: boolean;\n}\n\ninterface Options extends SharedOptions {\n moduleSpecName: string;\n schema: SchemaType;\n}\n\ninterface Config {\n generators: any[] /*Generators[]*/;\n test?: boolean;\n}\n\nfunction normalizeFileMap(\n map: Map<string, string>,\n outputDir: string,\n outMap: Map<string, string>,\n): void {\n for (const [fileName, contents] of map) {\n const location = path.join(outputDir, fileName);\n outMap.set(path.normalize(location), contents);\n }\n}\n\nfunction checkFilesForChanges(\n map: Map<string, string>,\n outputDir: string,\n): boolean {\n let hasChanges = false;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n const allExistingFiles = globby\n .sync([`${globbyDir}/**`, `${globbyDir}/**/.*`], {absolute: true})\n .map(_ => path.normalize(_));\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n\n if (\n allExistingFiles.length !== allGeneratedFiles.length ||\n !allGeneratedFiles.every(filepath =>\n allExistingFiles.includes(\n path.normalize(path.resolve(process.cwd(), filepath)),\n ),\n )\n )\n return true;\n\n for (const [fileName, contents] of map) {\n if (!fs.existsSync(fileName)) {\n hasChanges = true;\n continue;\n }\n\n const currentContents = fs.readFileSync(fileName, 'utf8');\n if (currentContents !== contents) {\n console.log(`- ${fileName} has changed`);\n hasChanges = true;\n continue;\n }\n }\n\n return hasChanges;\n}\n\nfunction writeMapToFiles(map: Map<string, string>, outputDir: string) {\n let success = true;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n\n // This ensures that we delete any generated files from modules that have been deleted\n const allExistingFiles = globby.sync(\n [`${globbyDir}/**`, `${globbyDir}/**/.*`],\n {absolute: true},\n );\n\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n allExistingFiles.forEach(existingFile => {\n if (!allGeneratedFiles.includes(path.normalize(existingFile))) {\n console.log('Deleting ', existingFile);\n fs.unlinkSync(existingFile);\n }\n });\n\n for (const [fileName, contents] of map) {\n try {\n fs.mkdirSync(path.dirname(fileName), {recursive: true});\n\n if (fs.existsSync(fileName)) {\n const currentContents = fs.readFileSync(fileName, 'utf8');\n // Don't update the files if there are no changes as this breaks incremental builds\n if (currentContents === contents) {\n continue;\n }\n }\n\n console.log('Writing ', fileName);\n fs.writeFileSync(fileName, contents);\n } catch (error) {\n success = false;\n console.error(`Failed to write ${fileName} to ${fileName}`, error);\n }\n }\n\n return success;\n}\n\nexport function parseFile(filename: string): SchemaType {\n try {\n const isTypeScript =\n path.extname(filename) === '.ts' || path.extname(filename) === '.tsx';\n const contents = fs.readFileSync(filename, 'utf8');\n const schema = getParser(isTypeScript).parseString(contents, filename);\n // there will be at most one turbo module per file\n const moduleName = Object.keys(schema.modules)[0];\n if (moduleName) {\n const spec = schema.modules[moduleName];\n if (spec.type === 'NativeModule') {\n if (contents) {\n // This is a temporary implementation until such information is added to the schema in facebook/react-native\n if (contents.includes('TurboModuleRegistry.get<')) {\n setOptionalTurboModule(spec, true);\n } else if (contents.includes('TurboModuleRegistry.getEnforcing<')) {\n setOptionalTurboModule(spec, false);\n }\n }\n }\n }\n return schema;\n } catch (e) {\n if (e instanceof Error) {\n e.message = `(${filename}): ${e.message}`;\n }\n throw e;\n }\n}\n\nexport function combineSchemas(files: string[]): SchemaType {\n return files.reduce(\n (merged, filename) => {\n const contents = fs.readFileSync(filename, 'utf8');\n if (\n contents &&\n (/export\\s+default\\s+\\(?codegenNativeComponent</.test(contents) ||\n contents.includes('extends TurboModule'))\n ) {\n const schema = parseFile(filename);\n merged.modules = {...merged.modules, ...schema.modules};\n }\n return merged;\n },\n {modules: {}},\n );\n}\n\nexport function generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n internalComponents,\n componentsWindows,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n }: Options,\n {/*generators,*/ test}: Config,\n): boolean {\n schemaValidator.validate(schema);\n\n const componentOutputdir = path.join(\n outputDirectory,\n 'react/components',\n libraryName,\n );\n\n const generatedFiles = new Map<string, string>();\n\n generatedFiles.set(\n path.join(outputDirectory, '.clang-format'),\n 'DisableFormat: true\\nSortIncludes: false',\n );\n\n const generateNM2 = createNM2Generator({\n methodOnly,\n namespace,\n cppStringType,\n separateDataTypes,\n });\n\n const generateJsiModuleH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/modules/GenerateModuleH',\n )).generate;\n // Use local fixed version instead of upstream to fix x86 union padding issue\n // with MixedTypeAnnotation. See GenerateModuleCpp.js for details.\n const generateJsiModuleCpp =\n require('./generators/GenerateModuleCpp').generate;\n const generatorPropsH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsH',\n )).generate;\n const generatorPropsCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsCpp',\n )).generate;\n const generatorShadowNodeH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeH',\n )).generate;\n const generatorShadowNodeCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeCpp',\n )).generate;\n const generatorComponentDescriptorH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateComponentDescriptorH',\n )).generate;\n const generatorEventEmitterH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterH',\n )).generate;\n const generatorEventEmitterCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterCpp',\n )).generate;\n const generatorStateCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateCpp',\n )).generate;\n const generatorStateH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateH',\n )).generate;\n\n const moduleGenerators = [];\n\n if (modulesWindows) {\n moduleGenerators.push(generateNM2);\n }\n\n if (modulesCxx) {\n moduleGenerators.push(generateJsiModuleH);\n moduleGenerators.push(generateJsiModuleCpp);\n }\n\n if (modulesTypeScriptTypes) {\n moduleGenerators.push(generateTypeScript);\n }\n\n moduleGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, outputDirectory, generatedFiles);\n });\n\n if (\n Object.keys(schema.modules).some(\n moduleName => schema.modules[moduleName].type === 'Component',\n )\n ) {\n const componentGenerators = [];\n\n if (internalComponents) {\n componentGenerators.push(\n generatorComponentDescriptorH,\n generatorEventEmitterCPP,\n generatorEventEmitterH,\n generatorPropsCPP,\n generatorPropsH,\n generatorShadowNodeCPP,\n generatorShadowNodeH,\n generatorStateCPP,\n generatorStateH,\n );\n }\n\n if (componentsWindows) {\n const generateComponentWindows = createComponentGenerator({\n namespace,\n cppStringType,\n });\n\n componentGenerators.push(generateComponentWindows);\n }\n\n componentGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, componentOutputdir, generatedFiles);\n });\n }\n\n if (test === true) {\n return checkFilesForChanges(generatedFiles, outputDirectory);\n }\n\n return writeMapToFiles(generatedFiles, outputDirectory);\n}\n\nexport interface CodeGenOptions extends SharedOptions {\n file?: string;\n files?: string[];\n test: boolean;\n}\n\nexport function runCodeGen(options: CodeGenOptions): boolean {\n if (!options.file && !options.files)\n throw new Error('Must specify file or files option');\n\n const schema = options.file\n ? parseFile(options.file)\n : combineSchemas(globby.sync(options.files!));\n\n const libraryName = options.libraryName;\n const moduleSpecName = 'moduleSpecName';\n const {\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-windows/codegen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.82.0-preview.2",
|
|
4
4
|
"description": "Generators for react-native-codegen targeting react-native-windows",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -22,17 +22,18 @@
|
|
|
22
22
|
"react-native-windows-codegen": "./bin.js"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-native-windows/fs": "0.
|
|
25
|
+
"@react-native-windows/fs": "0.82.0-preview.1",
|
|
26
26
|
"chalk": "^4.1.0",
|
|
27
27
|
"globby": "^11.1.0",
|
|
28
|
+
"minimatch": "^10.0.3",
|
|
28
29
|
"mustache": "^4.0.1",
|
|
29
30
|
"source-map-support": "^0.5.19",
|
|
30
31
|
"yargs": "^16.2.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
|
-
"@rnw-scripts/eslint-config": "1.2.
|
|
34
|
+
"@rnw-scripts/eslint-config": "1.2.38",
|
|
34
35
|
"@rnw-scripts/jest-unittest-config": "1.5.12",
|
|
35
|
-
"@rnw-scripts/just-task": "2.3.
|
|
36
|
+
"@rnw-scripts/just-task": "2.3.58",
|
|
36
37
|
"@rnw-scripts/ts-config": "2.0.6",
|
|
37
38
|
"@types/chalk": "^2.2.0",
|
|
38
39
|
"@types/jest": "^29.2.2",
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
"typescript": "5.0.4"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
50
|
-
"react-native": "
|
|
51
|
+
"react-native": "*"
|
|
51
52
|
},
|
|
52
53
|
"files": [
|
|
53
54
|
"bin.js",
|
|
@@ -57,11 +58,11 @@
|
|
|
57
58
|
"src"
|
|
58
59
|
],
|
|
59
60
|
"beachball": {
|
|
60
|
-
"defaultNpmTag": "
|
|
61
|
+
"defaultNpmTag": "preview",
|
|
61
62
|
"disallowedChangeTypes": [
|
|
62
63
|
"major",
|
|
63
64
|
"minor",
|
|
64
|
-
"
|
|
65
|
+
"patch",
|
|
65
66
|
"premajor",
|
|
66
67
|
"preminor",
|
|
67
68
|
"prepatch"
|
|
@@ -141,6 +141,12 @@ struct Base::_COMPONENT_NAME_:: {
|
|
|
141
141
|
winrt::Microsoft::ReactNative::ComponentViewUpdateMask /*mask*/) noexcept {
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
// CreateAutomationPeer will only be called if this method is overridden
|
|
145
|
+
virtual winrt::Windows::Foundation::IInspectable CreateAutomationPeer(const winrt::Microsoft::ReactNative::ComponentView & /*view*/,
|
|
146
|
+
const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& /*args*/) noexcept {
|
|
147
|
+
return nullptr;
|
|
148
|
+
}
|
|
149
|
+
|
|
144
150
|
::_COMPONENT_VIEW_COMMAND_HANDLERS_::
|
|
145
151
|
|
|
146
152
|
::_COMPONENT_VIEW_COMMAND_HANDLER_::
|
|
@@ -222,6 +228,14 @@ void Register::_COMPONENT_NAME_::NativeComponent(
|
|
|
222
228
|
});
|
|
223
229
|
}
|
|
224
230
|
|
|
231
|
+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateAutomationPeer != &Base::_COMPONENT_NAME_::<TUserData>::CreateAutomationPeer) {
|
|
232
|
+
builder.SetCreateAutomationPeerHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
|
|
233
|
+
const winrt::Microsoft::ReactNative::CreateAutomationPeerArgs& args) noexcept {
|
|
234
|
+
auto userData = view.UserData().as<TUserData>();
|
|
235
|
+
return userData->CreateAutomationPeer(view, args);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
225
239
|
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
|
|
226
240
|
auto userData = winrt::make_self<TUserData>();
|
|
227
241
|
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
// Load dependencies from @react-native/codegen
|
|
16
|
+
const rnPath = path.dirname(require.resolve('react-native/package.json'));
|
|
17
|
+
const rncodegenPath = path.dirname(
|
|
18
|
+
require.resolve('@react-native/codegen/package.json', {paths: [rnPath]}),
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const {unwrapNullable} = require(
|
|
22
|
+
path.resolve(rncodegenPath, 'lib/parsers/parsers-commons'),
|
|
23
|
+
);
|
|
24
|
+
const {createAliasResolver, getModules} = require(
|
|
25
|
+
path.resolve(rncodegenPath, 'lib/generators/modules/Utils'),
|
|
26
|
+
);
|
|
27
|
+
const HostFunctionTemplate = ({
|
|
28
|
+
hasteModuleName,
|
|
29
|
+
methodName,
|
|
30
|
+
returnTypeAnnotation,
|
|
31
|
+
args,
|
|
32
|
+
}) => {
|
|
33
|
+
const isNullable = returnTypeAnnotation.type === 'NullableTypeAnnotation';
|
|
34
|
+
const isVoid = returnTypeAnnotation.type === 'VoidTypeAnnotation';
|
|
35
|
+
const methodCallArgs = [' rt', ...args].join(',\n ');
|
|
36
|
+
const methodCall = `static_cast<${hasteModuleName}CxxSpecJSI *>(&turboModule)->${methodName}(\n${methodCallArgs}\n )`;
|
|
37
|
+
return `static jsi::Value __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {${isVoid ? `\n ${methodCall};` : isNullable ? `\n auto result = ${methodCall};` : ''}
|
|
38
|
+
return ${isVoid ? 'jsi::Value::undefined()' : isNullable ? 'result ? jsi::Value(std::move(*result)) : jsi::Value::null()' : methodCall};
|
|
39
|
+
}`;
|
|
40
|
+
};
|
|
41
|
+
const ModuleTemplate = ({
|
|
42
|
+
hasteModuleName,
|
|
43
|
+
hostFunctions,
|
|
44
|
+
moduleName,
|
|
45
|
+
methods,
|
|
46
|
+
}) => {
|
|
47
|
+
return `${hostFunctions.join('\n')}
|
|
48
|
+
|
|
49
|
+
${hasteModuleName}CxxSpecJSI::${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
|
|
50
|
+
: TurboModule("${moduleName}", jsInvoker) {
|
|
51
|
+
${methods
|
|
52
|
+
.map(({methodName, paramCount}) => {
|
|
53
|
+
return ` methodMap_["${methodName}"] = MethodMetadata {${paramCount}, __hostFunction_${hasteModuleName}CxxSpecJSI_${methodName}};`;
|
|
54
|
+
})
|
|
55
|
+
.join('\n')}
|
|
56
|
+
}`;
|
|
57
|
+
};
|
|
58
|
+
const FileTemplate = ({libraryName, modules}) => {
|
|
59
|
+
return `/**
|
|
60
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
61
|
+
*
|
|
62
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
63
|
+
* once the code is regenerated.
|
|
64
|
+
*
|
|
65
|
+
* ${'@'}generated by codegen project: GenerateModuleCpp.js
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
#include "${libraryName}JSI.h"
|
|
69
|
+
|
|
70
|
+
namespace facebook::react {
|
|
71
|
+
|
|
72
|
+
${modules}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
} // namespace facebook::react
|
|
76
|
+
`;
|
|
77
|
+
};
|
|
78
|
+
function serializeArg(moduleName, arg, index, resolveAlias, enumMap) {
|
|
79
|
+
const {typeAnnotation: nullableTypeAnnotation, optional} = arg;
|
|
80
|
+
const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
|
|
81
|
+
let realTypeAnnotation = typeAnnotation;
|
|
82
|
+
if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
|
|
83
|
+
realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
|
|
84
|
+
}
|
|
85
|
+
function wrap(callback) {
|
|
86
|
+
const val = `args[${index}]`;
|
|
87
|
+
const expression = callback(val);
|
|
88
|
+
|
|
89
|
+
// param?: T
|
|
90
|
+
if (optional && !nullable) {
|
|
91
|
+
// throw new Error('are we hitting this case? ' + moduleName);
|
|
92
|
+
return `count <= ${index} || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// param: ?T
|
|
96
|
+
// param?: ?T
|
|
97
|
+
if (nullable || optional) {
|
|
98
|
+
return `count <= ${index} || ${val}.isNull() || ${val}.isUndefined() ? std::nullopt : std::make_optional(${expression})`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// param: T
|
|
102
|
+
//return `count <= ${index} ? throw jsi::JSError(rt, "Expected argument in position ${index} to be passed") : ${expression}`;
|
|
103
|
+
//Windows #15545
|
|
104
|
+
return `(count > ${index} || (throw jsi::JSError(rt, "Expected argument in position ${index} to be passed"), false), ${expression})`;
|
|
105
|
+
//Windows
|
|
106
|
+
}
|
|
107
|
+
switch (realTypeAnnotation.type) {
|
|
108
|
+
case 'ReservedTypeAnnotation':
|
|
109
|
+
switch (realTypeAnnotation.name) {
|
|
110
|
+
case 'RootTag':
|
|
111
|
+
return wrap(val => `${val}.asNumber()`);
|
|
112
|
+
default:
|
|
113
|
+
realTypeAnnotation.name;
|
|
114
|
+
throw new Error(
|
|
115
|
+
`Unknown prop type for "${arg.name}, found: ${realTypeAnnotation.name}"`,
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
case 'StringTypeAnnotation':
|
|
119
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
120
|
+
case 'StringLiteralTypeAnnotation':
|
|
121
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
122
|
+
case 'StringLiteralUnionTypeAnnotation':
|
|
123
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
124
|
+
case 'BooleanTypeAnnotation':
|
|
125
|
+
return wrap(val => `${val}.asBool()`);
|
|
126
|
+
case 'EnumDeclaration':
|
|
127
|
+
switch (realTypeAnnotation.memberType) {
|
|
128
|
+
case 'NumberTypeAnnotation':
|
|
129
|
+
return wrap(val => `${val}.asNumber()`);
|
|
130
|
+
case 'StringTypeAnnotation':
|
|
131
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
132
|
+
default:
|
|
133
|
+
throw new Error(
|
|
134
|
+
`Unknown enum type for "${arg.name}, found: ${realTypeAnnotation.type}"`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
case 'NumberTypeAnnotation':
|
|
138
|
+
return wrap(val => `${val}.asNumber()`);
|
|
139
|
+
case 'FloatTypeAnnotation':
|
|
140
|
+
return wrap(val => `${val}.asNumber()`);
|
|
141
|
+
case 'DoubleTypeAnnotation':
|
|
142
|
+
return wrap(val => `${val}.asNumber()`);
|
|
143
|
+
case 'Int32TypeAnnotation':
|
|
144
|
+
return wrap(val => `${val}.asNumber()`);
|
|
145
|
+
case 'NumberLiteralTypeAnnotation':
|
|
146
|
+
return wrap(val => `${val}.asNumber()`);
|
|
147
|
+
case 'ArrayTypeAnnotation':
|
|
148
|
+
return wrap(val => `${val}.asObject(rt).asArray(rt)`);
|
|
149
|
+
case 'FunctionTypeAnnotation':
|
|
150
|
+
return wrap(val => `${val}.asObject(rt).asFunction(rt)`);
|
|
151
|
+
case 'GenericObjectTypeAnnotation':
|
|
152
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
153
|
+
case 'UnionTypeAnnotation':
|
|
154
|
+
switch (typeAnnotation.memberType) {
|
|
155
|
+
case 'NumberTypeAnnotation':
|
|
156
|
+
return wrap(val => `${val}.asNumber()`);
|
|
157
|
+
case 'ObjectTypeAnnotation':
|
|
158
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
159
|
+
case 'StringTypeAnnotation':
|
|
160
|
+
return wrap(val => `${val}.asString(rt)`);
|
|
161
|
+
default:
|
|
162
|
+
throw new Error(
|
|
163
|
+
`Unsupported union member type for param "${arg.name}, found: ${realTypeAnnotation.memberType}"`,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
case 'ObjectTypeAnnotation':
|
|
167
|
+
return wrap(val => `${val}.asObject(rt)`);
|
|
168
|
+
case 'MixedTypeAnnotation':
|
|
169
|
+
return wrap(val => `jsi::Value(rt, ${val})`);
|
|
170
|
+
default:
|
|
171
|
+
realTypeAnnotation.type;
|
|
172
|
+
throw new Error(
|
|
173
|
+
`Unknown prop type for "${arg.name}, found: ${realTypeAnnotation.type}"`,
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function serializePropertyIntoHostFunction(
|
|
178
|
+
moduleName,
|
|
179
|
+
hasteModuleName,
|
|
180
|
+
property,
|
|
181
|
+
resolveAlias,
|
|
182
|
+
enumMap,
|
|
183
|
+
) {
|
|
184
|
+
const [propertyTypeAnnotation] = unwrapNullable(property.typeAnnotation);
|
|
185
|
+
return HostFunctionTemplate({
|
|
186
|
+
hasteModuleName,
|
|
187
|
+
methodName: property.name,
|
|
188
|
+
returnTypeAnnotation: propertyTypeAnnotation.returnTypeAnnotation,
|
|
189
|
+
args: propertyTypeAnnotation.params.map((p, i) =>
|
|
190
|
+
serializeArg(moduleName, p, i, resolveAlias, enumMap),
|
|
191
|
+
),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
module.exports = {
|
|
195
|
+
generate(
|
|
196
|
+
libraryName,
|
|
197
|
+
schema,
|
|
198
|
+
packageName,
|
|
199
|
+
assumeNonnull = false,
|
|
200
|
+
headerPrefix,
|
|
201
|
+
) {
|
|
202
|
+
const nativeModules = getModules(schema);
|
|
203
|
+
const modules = Object.keys(nativeModules)
|
|
204
|
+
.map(hasteModuleName => {
|
|
205
|
+
const nativeModule = nativeModules[hasteModuleName];
|
|
206
|
+
const {
|
|
207
|
+
aliasMap,
|
|
208
|
+
enumMap,
|
|
209
|
+
spec: {methods},
|
|
210
|
+
moduleName,
|
|
211
|
+
} = nativeModule;
|
|
212
|
+
const resolveAlias = createAliasResolver(aliasMap);
|
|
213
|
+
const hostFunctions = methods.map(property =>
|
|
214
|
+
serializePropertyIntoHostFunction(
|
|
215
|
+
moduleName,
|
|
216
|
+
hasteModuleName,
|
|
217
|
+
property,
|
|
218
|
+
resolveAlias,
|
|
219
|
+
enumMap,
|
|
220
|
+
),
|
|
221
|
+
);
|
|
222
|
+
return ModuleTemplate({
|
|
223
|
+
hasteModuleName,
|
|
224
|
+
hostFunctions,
|
|
225
|
+
moduleName,
|
|
226
|
+
methods: methods.map(
|
|
227
|
+
({name: propertyName, typeAnnotation: nullableTypeAnnotation}) => {
|
|
228
|
+
const [{params}] = unwrapNullable(nullableTypeAnnotation);
|
|
229
|
+
return {
|
|
230
|
+
methodName: propertyName,
|
|
231
|
+
paramCount: params.length,
|
|
232
|
+
};
|
|
233
|
+
},
|
|
234
|
+
),
|
|
235
|
+
});
|
|
236
|
+
})
|
|
237
|
+
.join('\n');
|
|
238
|
+
const fileName = `${libraryName}JSI-generated.cpp`;
|
|
239
|
+
const replacedTemplate = FileTemplate({
|
|
240
|
+
modules,
|
|
241
|
+
libraryName,
|
|
242
|
+
});
|
|
243
|
+
return new Map([[fileName, replacedTemplate]]);
|
|
244
|
+
},
|
|
245
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -254,10 +254,10 @@ export function generate(
|
|
|
254
254
|
rncodegenPath,
|
|
255
255
|
'lib/generators/modules/GenerateModuleH',
|
|
256
256
|
)).generate;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
// Use local fixed version instead of upstream to fix x86 union padding issue
|
|
258
|
+
// with MixedTypeAnnotation. See GenerateModuleCpp.js for details.
|
|
259
|
+
const generateJsiModuleCpp =
|
|
260
|
+
require('./generators/GenerateModuleCpp').generate;
|
|
261
261
|
const generatorPropsH = require(path.resolve(
|
|
262
262
|
rncodegenPath,
|
|
263
263
|
'lib/generators/components/GeneratePropsH',
|