@react-native-windows/codegen 0.81.2 → 0.81.4

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 CHANGED
@@ -1,17 +1,37 @@
1
- # Change Log - @react-native-windows/codegen
2
-
3
- <!-- This log was last generated on Wed, 11 Feb 2026 16:10:18 GMT and should not be manually modified. -->
4
-
5
- <!-- Start content -->
6
-
7
- ## 0.81.2
8
-
9
- Wed, 11 Feb 2026 16:10:18 GMT
10
-
11
- ### Patches
12
-
13
- - Fix issues with more complex props and event types (30809111+acoates-ms@users.noreply.github.com)
14
-
1
+ # Change Log - @react-native-windows/codegen
2
+
3
+ <!-- This log was last generated on Thu, 12 Mar 2026 08:48:51 GMT and should not be manually modified. -->
4
+
5
+ <!-- Start content -->
6
+
7
+ ## 0.81.4
8
+
9
+ Thu, 12 Mar 2026 08:48:51 GMT
10
+
11
+ ### Patches
12
+
13
+ - Promote 0.81 to legacy (74712637+iamAbhi-916@users.noreply.github.com)
14
+ - Bump @react-native-windows/fs to v0.81.1
15
+
16
+ ## 0.81.3
17
+
18
+ Sat, 07 Mar 2026 04:08:18 GMT
19
+
20
+ ### Patches
21
+
22
+ - Generate fields to notify native if a JS event is being listened to (30809111+acoates-ms@users.noreply.github.com)
23
+ - Integrate 0.81.6 (30809111+acoates-ms@users.noreply.github.com)
24
+ - Fix lifetime issue with codegen'd eventemitter args (30809111+acoates-ms@users.noreply.github.com)
25
+ - Stop writing codegen files if it just changes new lines (30809111+acoates-ms@users.noreply.github.com)
26
+
27
+ ## 0.81.2
28
+
29
+ Wed, 11 Feb 2026 16:10:54 GMT
30
+
31
+ ### Patches
32
+
33
+ - Fix issues with more complex props and event types (30809111+acoates-ms@users.noreply.github.com)
34
+
15
35
  ## 0.81.1
16
36
 
17
37
  Tue, 27 Jan 2026 19:33:59 GMT
@@ -1389,4 +1409,4 @@ Thu, 23 Apr 2020 00:04:37 GMT
1389
1409
 
1390
1410
  ### Patches
1391
1411
 
1392
- - Initial react-native-windows-codegen (acoates@microsoft.com)
1412
+ - Initial react-native-windows-codegen (acoates@microsoft.com)
@@ -48,8 +48,8 @@ const eventsObjectTemplate = `REACT_STRUCT(::_OBJECT_NAME_::)
48
48
  struct ::_OBJECT_NAME_:: {
49
49
  ::_OBJECT_FIELDS_::};
50
50
  `;
51
- const eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &value) const {
52
- m_eventEmitter.DispatchEvent(L"::_EVENT_NAME_NO_ON_::", [&value](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {
51
+ const eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &&value) const {
52
+ m_eventEmitter.DispatchEvent(L"::_EVENT_NAME_NO_ON_::", [value = std::move(value)](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {
53
53
  winrt::Microsoft::ReactNative::WriteValue(writer, value);
54
54
  });
55
55
  }`;
@@ -286,6 +286,14 @@ function createComponentGenerator({ namespace, cppStringType, }) {
286
286
  : propType.type} ${prop.name}${propType.initializer};\n`;
287
287
  })
288
288
  .join('\n');
289
+ const eventPropFields = componentShape.events.length
290
+ ? ` // These fields can be used to determine if JS has registered for this event\n` +
291
+ componentShape.events
292
+ .map(event => {
293
+ return ` REACT_FIELD(${event.name})\n bool ${event.name}{false};\n`;
294
+ })
295
+ .join('\n')
296
+ : '';
289
297
  const propInitializers = componentShape.props
290
298
  .map(prop => {
291
299
  if (prop.typeAnnotation.type === 'MixedTypeAnnotation')
@@ -294,6 +302,13 @@ function createComponentGenerator({ namespace, cppStringType, }) {
294
302
  return ` ${prop.name} = cloneFromProps->${prop.name};`;
295
303
  })
296
304
  .join('\n');
305
+ const eventPropInitializers = componentShape.events.length
306
+ ? componentShape.events
307
+ .map(event => {
308
+ return ` ${event.name} = cloneFromProps->${event.name};`;
309
+ })
310
+ .join('\n')
311
+ : '';
297
312
  const propObjectTypes = propObjectAliases.jobs
298
313
  .map(propObjectTypeName => {
299
314
  const propObjectType = propObjectAliases.types[propObjectTypeName];
@@ -317,8 +332,7 @@ function createComponentGenerator({ namespace, cppStringType, }) {
317
332
  const eventEmitterMethods = componentShape.events
318
333
  .filter(event => event.typeAnnotation.argument)
319
334
  .map(event => {
320
- var _a;
321
- if ((_a = event.typeAnnotation.argument) === null || _a === void 0 ? void 0 : _a.baseTypes) {
335
+ if (event.typeAnnotation.argument?.baseTypes) {
322
336
  throw new Error('Events with base type arguments not currently supported');
323
337
  }
324
338
  // Called to collect the eventObjectAliases
@@ -439,8 +453,8 @@ ${command.typeAnnotation.params.length !== 0
439
453
  .replace(/::_EVENT_EMITTER_NAME_::/g, eventEmitterName)
440
454
  .replace(/::_PROPS_NAME_::/g, propsName)
441
455
  .replace(/::_COMPONENT_NAME_::/g, componentName)
442
- .replace(/::_PROP_INITIALIZERS_::/g, propInitializers)
443
- .replace(/::_PROPS_FIELDS_::/g, propsFields)
456
+ .replace(/::_PROP_INITIALIZERS_::/g, [propInitializers, eventPropInitializers].join('\n'))
457
+ .replace(/::_PROPS_FIELDS_::/g, [propsFields, eventPropFields].join('\n'))
444
458
  .replace(/::_NAMESPACE_::/g, namespace)
445
459
  .replace(/\n\n\n+/g, '\n\n');
446
460
  };
@@ -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 // 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 if (prop.typeAnnotation.type === 'MixedTypeAnnotation')\n return ` ${prop.name} = cloneFromProps->${prop.name}.Copy();`;\n else 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 eventObjectUsings = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n return ` using ${eventObjectTypeName.replace('on', 'On')} = ${\n getAliasCppName(eventObjectTypeName) /*.replace('_on', '_On')*/\n };`;\n })\n .join('\\n');\n\n // Collect all the alias types for the event objects so that we can generate the unnamed types within objects\n eventObjectAliases.jobs.forEach(eventObjectTypeName => {\n const eventObjectType =\n eventObjectAliases.types[eventObjectTypeName]!;\n eventObjectType.properties.forEach(property => {\n translateComponentEventType(\n property.typeAnnotation,\n eventObjectAliases,\n eventObjectTypeName,\n cppCodegenOptions,\n );\n });\n });\n\n const eventObjects = eventObjectAliases.jobs\n .reverse()\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 getAliasCppName(eventObjectTypeName) /*.replace('_on', '_On')*/,\n )\n .replace(/::_OBJECT_FIELDS_::/g, eventObjectFields);\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 = std::move(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 eventPropFields = componentShape.events.length\n ? ` // These fields can be used to determine if JS has registered for this event\\n` +\n componentShape.events\n .map(event => {\n return ` REACT_FIELD(${event.name})\\n bool ${event.name}{false};\\n`;\n })\n .join('\\n')\n : '';\n\n const propInitializers = componentShape.props\n .map(prop => {\n if (prop.typeAnnotation.type === 'MixedTypeAnnotation')\n return ` ${prop.name} = cloneFromProps->${prop.name}.Copy();`;\n else return ` ${prop.name} = cloneFromProps->${prop.name};`;\n })\n .join('\\n');\n\n const eventPropInitializers = componentShape.events.length\n ? componentShape.events\n .map(event => {\n return ` ${event.name} = cloneFromProps->${event.name};`;\n })\n .join('\\n')\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 eventObjectUsings = eventObjectAliases.jobs\n .map(eventObjectTypeName => {\n return ` using ${eventObjectTypeName.replace('on', 'On')} = ${\n getAliasCppName(eventObjectTypeName) /*.replace('_on', '_On')*/\n };`;\n })\n .join('\\n');\n\n // Collect all the alias types for the event objects so that we can generate the unnamed types within objects\n eventObjectAliases.jobs.forEach(eventObjectTypeName => {\n const eventObjectType =\n eventObjectAliases.types[eventObjectTypeName]!;\n eventObjectType.properties.forEach(property => {\n translateComponentEventType(\n property.typeAnnotation,\n eventObjectAliases,\n eventObjectTypeName,\n cppCodegenOptions,\n );\n });\n });\n\n const eventObjects = eventObjectAliases.jobs\n .reverse()\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 getAliasCppName(eventObjectTypeName) /*.replace('_on', '_On')*/,\n )\n .replace(/::_OBJECT_FIELDS_::/g, eventObjectFields);\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(\n /::_PROP_INITIALIZERS_::/g,\n [propInitializers, eventPropInitializers].join('\\n'),\n )\n .replace(\n /::_PROPS_FIELDS_::/g,\n [propsFields, eventPropFields].join('\\n'),\n )\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"]}
@@ -12,8 +12,7 @@ function setOptionalTurboModule(schema, optional) {
12
12
  }
13
13
  exports.setOptionalTurboModule = setOptionalTurboModule;
14
14
  function getOptionalTurboModule(schema) {
15
- var _a;
16
- return (_a = schema.optionalTurboModule) !== null && _a !== void 0 ? _a : false;
15
+ return schema.optionalTurboModule ?? false;
17
16
  }
18
17
  exports.getOptionalTurboModule = getOptionalTurboModule;
19
18
  const moduleTemplate = `
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateTypeScript.js","sourceRoot":"","sources":["../../src/generators/GenerateTypeScript.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 NamedShape,\n NativeModuleBaseTypeAnnotation,\n NativeModuleFunctionTypeAnnotation,\n NativeModuleObjectTypeAnnotation,\n NativeModuleParamTypeAnnotation,\n NativeModuleReturnTypeAnnotation,\n NativeModuleSchema,\n UnsafeAnyTypeAnnotation,\n Nullable,\n SchemaType,\n} from '@react-native/codegen/lib/CodegenSchema';\n\ninterface CodegenNativeModuleSchema extends NativeModuleSchema {\n optionalTurboModule?: boolean;\n}\n\nexport function setOptionalTurboModule(\n schema: NativeModuleSchema,\n optional: boolean,\n): void {\n const cs = <CodegenNativeModuleSchema>schema;\n cs.optionalTurboModule = optional;\n}\n\nexport function getOptionalTurboModule(schema: NativeModuleSchema): boolean {\n return (<CodegenNativeModuleSchema>schema).optionalTurboModule ?? false;\n}\n\ntype ObjectProp = NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>;\ntype FunctionParam = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;\ntype FunctionDecl = NamedShape<Nullable<NativeModuleFunctionTypeAnnotation>>;\ntype FilesOutput = Map<string, string>;\n\nconst moduleTemplate = `\n/*\n * This file is auto-generated from a NativeModule spec file in js.\n *\n * This is a TypeScript turbo module definition file.\n */\n\nimport {TurboModule, TurboModuleRegistry} from 'react-native';\n'use strict';\n::_MODULE_ALIASED_STRUCTS_::\nexport interface Spec extends TurboModule {\n::_MODULE_MEMBERS_::\n}\n\nexport default TurboModuleRegistry.::_MODULE_GETTER_::<Spec>('::_MODULE_NAME_::');\n`;\n\nfunction optionalSign<T>(obj: NamedShape<T>): string {\n return obj.optional ? '?' : '';\n}\n\nfunction translateType(\n type:\n | Nullable<\n | NativeModuleBaseTypeAnnotation\n | NativeModuleParamTypeAnnotation\n | NativeModuleReturnTypeAnnotation\n >\n | UnsafeAnyTypeAnnotation,\n): string {\n // avoid: Property 'type' does not exist on type 'never'\n const returnType = type.type;\n switch (type.type) {\n case 'StringTypeAnnotation':\n return 'string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n case 'Int32TypeAnnotation':\n return 'number';\n case 'BooleanTypeAnnotation':\n return 'boolean';\n case 'ArrayTypeAnnotation':\n if (type.elementType.type !== 'AnyTypeAnnotation') {\n return `${translateType(type.elementType)}[]`;\n } else {\n return `Array`;\n }\n case 'GenericObjectTypeAnnotation':\n return 'object';\n case 'ObjectTypeAnnotation':\n return `{${type.properties\n .map((prop: ObjectProp) => {\n return `${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )}`;\n })\n .join(', ')}}`;\n case 'ReservedTypeAnnotation': {\n // avoid: Property 'name' does not exist on type 'never'\n const name = type.name;\n // (#6597)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (name !== 'RootTag')\n throw new Error(\n `Unknown reserved function: ${name} in translateReturnType`,\n );\n return 'number';\n }\n case 'TypeAliasTypeAnnotation':\n return type.name;\n case 'NullableTypeAnnotation':\n return `(${translateType(type.typeAnnotation)} | null | undefined)`;\n case 'VoidTypeAnnotation':\n return `void`;\n case 'PromiseTypeAnnotation':\n return `Promise`;\n case `FunctionTypeAnnotation`:\n return `((${type.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')}) => ${translateType(type.returnTypeAnnotation)})`;\n default:\n throw new Error(`Unhandled type in translateReturnType: ${returnType}`);\n }\n}\n\nfunction translateAlias(\n name: string,\n type: NativeModuleObjectTypeAnnotation,\n): string {\n return `\nexport interface ${name} {\n${type.properties\n .map((prop: ObjectProp) => {\n return ` ${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )};`;\n })\n .join('\\n')}\n}\n`;\n}\n\nfunction tryGetConstantType(\n nativeModule: NativeModuleSchema,\n): NativeModuleObjectTypeAnnotation | undefined {\n const candidates = nativeModule.spec.methods.filter(\n prop => prop.name === 'getConstants',\n );\n if (candidates.length === 0) {\n return undefined;\n }\n\n const getConstant = candidates[0];\n const funcType =\n getConstant.typeAnnotation.type === 'NullableTypeAnnotation'\n ? getConstant.typeAnnotation.typeAnnotation\n : getConstant.typeAnnotation;\n if (\n funcType.params.length > 0 ||\n funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation'\n ) {\n return undefined;\n }\n\n const constantType = funcType.returnTypeAnnotation;\n if (constantType.properties.length === 0) {\n return undefined;\n }\n\n return constantType;\n}\n\nfunction translateMethod(func: FunctionDecl): string {\n const funcType =\n func.typeAnnotation.type === 'NullableTypeAnnotation'\n ? func.typeAnnotation.typeAnnotation\n : func.typeAnnotation;\n\n return `\n ${func.name}(${funcType.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')})${optionalSign(func)}: ${translateType(\n funcType.returnTypeAnnotation,\n )}${\n funcType.returnTypeAnnotation.type === 'ObjectTypeAnnotation' ? '' : ';'\n }`;\n}\n\nexport function generateTypeScript(\n _libraryName: string,\n schema: SchemaType,\n _moduleSpecName: string,\n): FilesOutput {\n const files = new Map<string, string>();\n\n for (const moduleName of Object.keys(schema.modules)) {\n const nativeModule = schema.modules[moduleName];\n // from 0.65 facebook's react-native-codegen\n // the module name has the Native prefix comparing to 0.63\n // when reading files we provided\n const nativePrefix = 'Native';\n const preferredModuleName = moduleName.startsWith(nativePrefix)\n ? moduleName.substr(nativePrefix.length)\n : moduleName;\n\n if (nativeModule.type === 'NativeModule') {\n console.log(`Generating ${preferredModuleName}Spec.g.ts`);\n\n const aliasCode = Object.keys(nativeModule.aliasMap)\n .map(name => translateAlias(name, nativeModule.aliasMap[name]))\n .join('');\n\n const constantType = tryGetConstantType(nativeModule);\n const constantCode =\n constantType === undefined\n ? ''\n : ` getConstants(): ${translateType(constantType)}`;\n\n const methods = nativeModule.spec.methods.filter(\n prop => prop.name !== 'getConstants',\n );\n const membersCode = methods.map(translateMethod).join('');\n\n files.set(\n `${preferredModuleName}Spec.g.ts`,\n moduleTemplate\n .replace(/::_MODULE_ALIASED_STRUCTS_::/g, aliasCode)\n .replace(/::_MODULE_MEMBERS_::/g, constantCode + membersCode)\n .replace(/::_MODULE_NAME_::/g, preferredModuleName)\n .replace(\n /::_MODULE_GETTER_::/g,\n getOptionalTurboModule(nativeModule) ? 'get' : 'getEnforcing',\n ),\n );\n }\n }\n\n return files;\n}\n"]}
1
+ {"version":3,"file":"GenerateTypeScript.js","sourceRoot":"","sources":["../../src/generators/GenerateTypeScript.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 NamedShape,\n NativeModuleBaseTypeAnnotation,\n NativeModuleFunctionTypeAnnotation,\n NativeModuleObjectTypeAnnotation,\n NativeModuleParamTypeAnnotation,\n NativeModuleReturnTypeAnnotation,\n NativeModuleSchema,\n UnsafeAnyTypeAnnotation,\n Nullable,\n SchemaType,\n} from '@react-native/codegen/lib/CodegenSchema';\n\ninterface CodegenNativeModuleSchema extends NativeModuleSchema {\n optionalTurboModule?: boolean;\n}\n\nexport function setOptionalTurboModule(\n schema: NativeModuleSchema,\n optional: boolean,\n): void {\n const cs = <CodegenNativeModuleSchema>schema;\n cs.optionalTurboModule = optional;\n}\n\nexport function getOptionalTurboModule(schema: NativeModuleSchema): boolean {\n return (<CodegenNativeModuleSchema>schema).optionalTurboModule ?? false;\n}\n\ntype ObjectProp = NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>;\ntype FunctionParam = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;\ntype FunctionDecl = NamedShape<Nullable<NativeModuleFunctionTypeAnnotation>>;\ntype FilesOutput = Map<string, string>;\n\nconst moduleTemplate = `\n/*\n * This file is auto-generated from a NativeModule spec file in js.\n *\n * This is a TypeScript turbo module definition file.\n */\n\nimport {TurboModule, TurboModuleRegistry} from 'react-native';\n'use strict';\n::_MODULE_ALIASED_STRUCTS_::\nexport interface Spec extends TurboModule {\n::_MODULE_MEMBERS_::\n}\n\nexport default TurboModuleRegistry.::_MODULE_GETTER_::<Spec>('::_MODULE_NAME_::');\n`;\n\nfunction optionalSign<T>(obj: NamedShape<T>): string {\n return obj.optional ? '?' : '';\n}\n\nfunction translateType(\n type:\n | Nullable<\n | NativeModuleBaseTypeAnnotation\n | NativeModuleParamTypeAnnotation\n | NativeModuleReturnTypeAnnotation\n >\n | UnsafeAnyTypeAnnotation,\n): string {\n // avoid: Property 'type' does not exist on type 'never'\n const returnType = type.type;\n switch (type.type) {\n case 'StringTypeAnnotation':\n return 'string';\n case 'NumberTypeAnnotation':\n case 'FloatTypeAnnotation':\n case 'DoubleTypeAnnotation':\n case 'Int32TypeAnnotation':\n return 'number';\n case 'BooleanTypeAnnotation':\n return 'boolean';\n case 'ArrayTypeAnnotation':\n if (type.elementType.type !== 'AnyTypeAnnotation') {\n return `${translateType(type.elementType)}[]`;\n } else {\n return `Array`;\n }\n case 'GenericObjectTypeAnnotation':\n return 'object';\n case 'ObjectTypeAnnotation':\n return `{${type.properties\n .map((prop: ObjectProp) => {\n return `${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )}`;\n })\n .join(', ')}}`;\n case 'ReservedTypeAnnotation': {\n // avoid: Property 'name' does not exist on type 'never'\n const name = type.name;\n // (#6597)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (name !== 'RootTag')\n throw new Error(\n `Unknown reserved function: ${name} in translateReturnType`,\n );\n return 'number';\n }\n case 'TypeAliasTypeAnnotation':\n return type.name;\n case 'NullableTypeAnnotation':\n return `(${translateType(type.typeAnnotation)} | null | undefined)`;\n case 'VoidTypeAnnotation':\n return `void`;\n case 'PromiseTypeAnnotation':\n return `Promise`;\n case `FunctionTypeAnnotation`:\n return `((${type.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')}) => ${translateType(type.returnTypeAnnotation)})`;\n default:\n throw new Error(`Unhandled type in translateReturnType: ${returnType}`);\n }\n}\n\nfunction translateAlias(\n name: string,\n type: NativeModuleObjectTypeAnnotation,\n): string {\n return `\nexport interface ${name} {\n${type.properties\n .map((prop: ObjectProp) => {\n return ` ${prop.name}${optionalSign(prop)}: ${translateType(\n prop.typeAnnotation,\n )};`;\n })\n .join('\\n')}\n}\n`;\n}\n\nfunction tryGetConstantType(\n nativeModule: NativeModuleSchema,\n): NativeModuleObjectTypeAnnotation | undefined {\n const candidates = nativeModule.spec.methods.filter(\n prop => prop.name === 'getConstants',\n );\n if (candidates.length === 0) {\n return undefined;\n }\n\n const getConstant = candidates[0];\n const funcType =\n getConstant.typeAnnotation.type === 'NullableTypeAnnotation'\n ? getConstant.typeAnnotation.typeAnnotation\n : getConstant.typeAnnotation;\n if (\n funcType.params.length > 0 ||\n funcType.returnTypeAnnotation.type !== 'ObjectTypeAnnotation'\n ) {\n return undefined;\n }\n\n const constantType = funcType.returnTypeAnnotation;\n if (constantType.properties.length === 0) {\n return undefined;\n }\n\n return constantType;\n}\n\nfunction translateMethod(func: FunctionDecl): string {\n const funcType =\n func.typeAnnotation.type === 'NullableTypeAnnotation'\n ? func.typeAnnotation.typeAnnotation\n : func.typeAnnotation;\n\n return `\n ${func.name}(${funcType.params\n .map((param: FunctionParam) => {\n return `${param.name}${optionalSign(param)}: ${translateType(\n param.typeAnnotation,\n )}`;\n })\n .join(', ')})${optionalSign(func)}: ${translateType(\n funcType.returnTypeAnnotation,\n )}${\n funcType.returnTypeAnnotation.type === 'ObjectTypeAnnotation' ? '' : ';'\n }`;\n}\n\nexport function generateTypeScript(\n _libraryName: string,\n schema: SchemaType,\n _moduleSpecName: string,\n): FilesOutput {\n const files = new Map<string, string>();\n\n for (const moduleName of Object.keys(schema.modules)) {\n const nativeModule = schema.modules[moduleName];\n // from 0.65 facebook's react-native-codegen\n // the module name has the Native prefix comparing to 0.63\n // when reading files we provided\n const nativePrefix = 'Native';\n const preferredModuleName = moduleName.startsWith(nativePrefix)\n ? moduleName.substr(nativePrefix.length)\n : moduleName;\n\n if (nativeModule.type === 'NativeModule') {\n console.log(`Generating ${preferredModuleName}Spec.g.ts`);\n\n const aliasCode = Object.keys(nativeModule.aliasMap)\n .map(name => translateAlias(name, nativeModule.aliasMap[name]))\n .join('');\n\n const constantType = tryGetConstantType(nativeModule);\n const constantCode =\n constantType === undefined\n ? ''\n : ` getConstants(): ${translateType(constantType)}`;\n\n const methods = nativeModule.spec.methods.filter(\n prop => prop.name !== 'getConstants',\n );\n const membersCode = methods.map(translateMethod).join('');\n\n files.set(\n `${preferredModuleName}Spec.g.ts`,\n moduleTemplate\n .replace(/::_MODULE_ALIASED_STRUCTS_::/g, aliasCode)\n .replace(/::_MODULE_MEMBERS_::/g, constantCode + membersCode)\n .replace(/::_MODULE_NAME_::/g, preferredModuleName)\n .replace(\n /::_MODULE_GETTER_::/g,\n getOptionalTurboModule(nativeModule) ? 'get' : 'getEnforcing',\n ),\n );\n }\n }\n\n return files;\n}\n"]}
@@ -53,7 +53,8 @@ function checkFilesForChanges(map, outputDir) {
53
53
  continue;
54
54
  }
55
55
  const currentContents = fs_1.default.readFileSync(fileName, 'utf8');
56
- if (currentContents !== contents) {
56
+ // The current file may be saved using crlf, in which case the new lines may differ from the new output
57
+ if (currentContents.replaceAll('\r\n', '\n') !== contents) {
57
58
  console.log(`- ${fileName} has changed`);
58
59
  hasChanges = true;
59
60
  continue;
@@ -80,7 +81,8 @@ function writeMapToFiles(map, outputDir) {
80
81
  if (fs_1.default.existsSync(fileName)) {
81
82
  const currentContents = fs_1.default.readFileSync(fileName, 'utf8');
82
83
  // Don't update the files if there are no changes as this breaks incremental builds
83
- if (currentContents === contents) {
84
+ // The current file may be saved using crlf, in which case the new lines may differ from the new output
85
+ if (currentContents.replaceAll('\r\n', '\n') === contents) {
84
86
  continue;
85
87
  }
86
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,gDAAwB;AACxB,kEAA0C;AAC1C,oDAA4B;AAE5B,0DAA4D;AAC5D,oFAA+E;AAC/E,wEAGyC;AAMzC,+CAA+C;AAC/C,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAC1E,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAChC,OAAO,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAC,CAAC,CACzE,CAAC;AAEF,SAAS,SAAS,CAAC,YAAqB;IACtC,IAAI,YAAY,EAAE;QAChB,MAAM,EAAE,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC7B,aAAa,EACb,+BAA+B,CAChC,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC;KAClC;SAAM;QACL,MAAM,EAAE,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;KAC5B;AACH,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,qBAAqB,CACtB,CAAC,CAAC;AA0BH,SAAS,gBAAgB,CACvB,GAAwB,EACxB,SAAiB,EACjB,MAA2B;IAE3B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;KAChD;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAwB,EACxB,SAAiB;IAEjB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,gBAAM;SAC5B,IAAI,CAAC,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,QAAQ,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7E,IACE,gBAAgB,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;QACpD,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAClC,gBAAgB,CAAC,QAAQ,CACvB,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CACtD,CACF;QAED,OAAO,IAAI,CAAC;IAEd,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;SACV;QAED,MAAM,eAAe,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,eAAe,KAAK,QAAQ,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,cAAc,CAAC,CAAC;YACzC,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;SACV;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,GAAwB,EAAE,SAAiB;IAClE,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,sFAAsF;IACtF,MAAM,gBAAgB,GAAG,gBAAM,CAAC,IAAI,CAClC,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,QAAQ,CAAC,EACzC,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACtC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE;YAC7D,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC7B;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,IAAI;YACF,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YAExD,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,MAAM,eAAe,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1D,mFAAmF;gBACnF,IAAI,eAAe,KAAK,QAAQ,EAAE;oBAChC,SAAS;iBACV;aACF;YAED,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClC,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACtC;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,OAAO,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;SACpE;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,IAAI;QACF,MAAM,YAAY,GAChB,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;QACxE,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,kDAAkD;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE;gBAChC,IAAI,QAAQ,EAAE;oBACZ,4GAA4G;oBAC5G,IAAI,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;wBACjD,IAAA,2CAAsB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACpC;yBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE;wBACjE,IAAA,2CAAsB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBACrC;iBACF;aACF;SACF;QACD,OAAO,MAAM,CAAC;KACf;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,YAAY,KAAK,EAAE;YACtB,CAAC,CAAC,OAAO,GAAG,IAAI,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;SAC3C;QACD,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AA5BD,8BA4BC;AAED,SAAgB,cAAc,CAAC,KAAe;IAC5C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IACE,QAAQ;YACR,CAAC,+CAA+C,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC7D,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAC3C;YACA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,EAAC,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAC,CAAC;SACzD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAC,OAAO,EAAE,EAAE,EAAC,CACd,CAAC;AACJ,CAAC;AAhBD,wCAgBC;AAED,SAAgB,QAAQ,CACtB,EACE,WAAW,EACX,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,MAAM,GACE,EACV,EAAC,eAAe,CAAC,IAAI,EAAS;IAE9B,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAClC,eAAe,EACf,kBAAkB,EAClB,WAAW,CACZ,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,cAAc,CAAC,GAAG,CAChB,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EAC3C,0CAA0C,CAC3C,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,gCAAkB,EAAC;QACrC,UAAU;QACV,SAAS;QACT,aAAa;QACb,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC7C,aAAa,EACb,wCAAwC,CACzC,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC/C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC5C,aAAa,EACb,4CAA4C,CAC7C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC/C,aAAa,EACb,+CAA+C,CAChD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACjD,aAAa,EACb,iDAAiD,CAClD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,6BAA6B,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACxD,aAAa,EACb,wDAAwD,CACzD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACjD,aAAa,EACb,iDAAiD,CAClD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,wBAAwB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACnD,aAAa,EACb,mDAAmD,CACpD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC5C,aAAa,EACb,4CAA4C,CAC7C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAE5B,IAAI,cAAc,EAAE;QAClB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;IAED,IAAI,UAAU,EAAE;QACd,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1C,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KAC7C;IAED,IAAI,sBAAsB,EAAE;QAC1B,gBAAgB,CAAC,IAAI,CAAC,uCAAkB,CAAC,CAAC;KAC3C;IAED,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnC,MAAM,SAAS,GAAwB,SAAS,CAC9C,WAAW,EACX,MAAM,EACN,cAAc,CACf,CAAC;QACF,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9D,EACD;QACA,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAE/B,IAAI,kBAAkB,EAAE;YACtB,mBAAmB,CAAC,IAAI,CACtB,6BAA6B,EAC7B,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,CAChB,CAAC;SACH;QAED,IAAI,iBAAiB,EAAE;YACrB,MAAM,wBAAwB,GAAG,IAAA,mDAAwB,EAAC;gBACxD,SAAS;gBACT,aAAa;aACd,CAAC,CAAC;YAEH,mBAAmB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACpD;QAED,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACtC,MAAM,SAAS,GAAwB,SAAS,CAC9C,WAAW,EACX,MAAM,EACN,cAAc,CACf,CAAC;YACF,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,OAAO,oBAAoB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;KAC9D;IAED,OAAO,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC;AA1JD,4BA0JC;AAQD,SAAgB,UAAU,CAAC,OAAuB;IAChD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;QACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI;QACzB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,cAAc,CAAC,gBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,EACJ,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,GAAG,OAAO,CAAC;IACZ,OAAO,QAAQ,CACb;QACE,WAAW;QACX,UAAU;QACV,UAAU;QACV,sBAAsB;QACtB,cAAc;QACd,iBAAiB;QACjB,kBAAkB;QAClB,SAAS;QACT,eAAe;QACf,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,MAAM;KACP,EACD,EAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CACrC,CAAC;AACJ,CAAC;AAxCD,gCAwCC","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 // The current file may be saved using crlf, in which case the new lines may differ from the new output\n if (currentContents.replaceAll('\\r\\n', '\\n') !== 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 // The current file may be saved using crlf, in which case the new lines may differ from the new output\n if (currentContents.replaceAll('\\r\\n', '\\n') === 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-windows/codegen",
3
- "version": "0.81.2",
3
+ "version": "0.81.4",
4
4
  "description": "Generators for react-native-codegen targeting react-native-windows",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "repository": {
@@ -22,7 +22,7 @@
22
22
  "react-native-windows-codegen": "./bin.js"
23
23
  },
24
24
  "dependencies": {
25
- "@react-native-windows/fs": "0.81.0",
25
+ "@react-native-windows/fs": "0.81.1",
26
26
  "chalk": "^4.1.0",
27
27
  "globby": "^11.1.0",
28
28
  "mustache": "^4.0.1",
@@ -47,7 +47,7 @@
47
47
  "typescript": "5.0.4"
48
48
  },
49
49
  "peerDependencies": {
50
- "react-native": "^0.81.0-0"
50
+ "react-native": "^0.81.0"
51
51
  },
52
52
  "files": [
53
53
  "bin.js",
@@ -57,7 +57,7 @@
57
57
  "src"
58
58
  ],
59
59
  "beachball": {
60
- "defaultNpmTag": "latest",
60
+ "defaultNpmTag": "v0.81-stable",
61
61
  "disallowedChangeTypes": [
62
62
  "major",
63
63
  "minor",
@@ -69,8 +69,8 @@ struct ::_OBJECT_NAME_:: {
69
69
  ::_OBJECT_FIELDS_::};
70
70
  `;
71
71
 
72
- const eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &value) const {
73
- m_eventEmitter.DispatchEvent(L"::_EVENT_NAME_NO_ON_::", [&value](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {
72
+ const eventEmitterMethodTemplate = ` void ::_EVENT_NAME_::(::_EVENT_OBJECT_TYPE_:: &&value) const {
73
+ m_eventEmitter.DispatchEvent(L"::_EVENT_NAME_NO_ON_::", [value = std::move(value)](const winrt::Microsoft::ReactNative::IJSValueWriter writer) {
74
74
  winrt::Microsoft::ReactNative::WriteValue(writer, value);
75
75
  });
76
76
  }`;
@@ -342,6 +342,15 @@ export function createComponentGenerator({
342
342
  })
343
343
  .join('\n');
344
344
 
345
+ const eventPropFields = componentShape.events.length
346
+ ? ` // These fields can be used to determine if JS has registered for this event\n` +
347
+ componentShape.events
348
+ .map(event => {
349
+ return ` REACT_FIELD(${event.name})\n bool ${event.name}{false};\n`;
350
+ })
351
+ .join('\n')
352
+ : '';
353
+
345
354
  const propInitializers = componentShape.props
346
355
  .map(prop => {
347
356
  if (prop.typeAnnotation.type === 'MixedTypeAnnotation')
@@ -350,6 +359,14 @@ export function createComponentGenerator({
350
359
  })
351
360
  .join('\n');
352
361
 
362
+ const eventPropInitializers = componentShape.events.length
363
+ ? componentShape.events
364
+ .map(event => {
365
+ return ` ${event.name} = cloneFromProps->${event.name};`;
366
+ })
367
+ .join('\n')
368
+ : '';
369
+
353
370
  const propObjectTypes = propObjectAliases.jobs
354
371
  .map(propObjectTypeName => {
355
372
  const propObjectType = propObjectAliases.types[propObjectTypeName]!;
@@ -578,8 +595,14 @@ ${
578
595
  .replace(/::_EVENT_EMITTER_NAME_::/g, eventEmitterName)
579
596
  .replace(/::_PROPS_NAME_::/g, propsName)
580
597
  .replace(/::_COMPONENT_NAME_::/g, componentName)
581
- .replace(/::_PROP_INITIALIZERS_::/g, propInitializers)
582
- .replace(/::_PROPS_FIELDS_::/g, propsFields)
598
+ .replace(
599
+ /::_PROP_INITIALIZERS_::/g,
600
+ [propInitializers, eventPropInitializers].join('\n'),
601
+ )
602
+ .replace(
603
+ /::_PROPS_FIELDS_::/g,
604
+ [propsFields, eventPropFields].join('\n'),
605
+ )
583
606
  .replace(/::_NAMESPACE_::/g, namespace)
584
607
  .replace(/\n\n\n+/g, '\n\n');
585
608
  };
package/src/index.ts CHANGED
@@ -109,7 +109,8 @@ function checkFilesForChanges(
109
109
  }
110
110
 
111
111
  const currentContents = fs.readFileSync(fileName, 'utf8');
112
- if (currentContents !== contents) {
112
+ // The current file may be saved using crlf, in which case the new lines may differ from the new output
113
+ if (currentContents.replaceAll('\r\n', '\n') !== contents) {
113
114
  console.log(`- ${fileName} has changed`);
114
115
  hasChanges = true;
115
116
  continue;
@@ -146,7 +147,8 @@ function writeMapToFiles(map: Map<string, string>, outputDir: string) {
146
147
  if (fs.existsSync(fileName)) {
147
148
  const currentContents = fs.readFileSync(fileName, 'utf8');
148
149
  // Don't update the files if there are no changes as this breaks incremental builds
149
- if (currentContents === contents) {
150
+ // The current file may be saved using crlf, in which case the new lines may differ from the new output
151
+ if (currentContents.replaceAll('\r\n', '\n') === contents) {
150
152
  continue;
151
153
  }
152
154
  }