/// <summary> /// Create the template output /// </summary> public virtual string TransformText() { this.Write(@"#pragma once #include ""pch.h"" #include ""XamlMetadata.h"" #include ""Serialize.h"" #include ""Crc32Str.h"" #include <JSValueWriter.h> /************************************************************* THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT MODIFY MANUALLY **************************************************************/ "); #line 17 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" foreach (var ns in Events.Select(p => p.DeclaringType.GetNamespace()).Distinct()) { #line default #line hidden this.Write("#include <winrt/"); #line 18 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ns)); #line default #line hidden this.Write(".h>\r\n"); #line 19 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" } #line default #line hidden this.Write("#include <winrt/"); #line 20 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(XamlNames.XamlNamespace)); #line default #line hidden this.Write(".Input.h>\r\n\r\n/////// Events\r\ntemplate<typename TArgs>\r\nvoid SerializeEventArgs(wi" + "nrt::Microsoft::ReactNative::IJSValueWriter const& writer, const winrt::Windows:" + ":Foundation::IInspectable& sender, const TArgs& args);\r\n\r\n\r\ntemplate<typename T>" + "\r\n__declspec(noinline) T DoTheTypeChecking(const winrt::Windows::Foundation::IIn" + "spectable& ii, bool isWrapped) {\r\n auto o = isWrapped ? Unwrap<T>(ii) : ii.try_" + "as<T>();\r\n return o;\r\n}\r\n\r\ntemplate<typename T>\r\n__declspec(noinline) void Disp" + "atchTheEvent(const EventAttachInfo& eai, const winrt::Windows::Foundation::IInsp" + "ectable& sender, const T& args) {\r\n auto senderAsFE = sender.try_as<FrameworkEl" + "ement>();\r\n auto wEN = winrt::to_hstring(eai.jsEventName);\r\n if (eai.xamlMetad" + "ata.m_callFunctionReturnFlushedQueue.has_value()) {\r\n const auto tag = winrt:" + ":unbox_value<int64_t>(eai.obj.as<FrameworkElement>().Tag());\r\n ExecuteJsi(eai" + ".context, [metadata = eai.xamlMetadata.shared_from_this(), tag, senderAsFE, args" + ", eventName = eai.jsEventName](facebook::jsi::Runtime& rt) {\r\n auto objSend" + "er = std::make_shared<XamlObject>(senderAsFE, metadata);\r\n auto objArgs = s" + "td::make_shared<XamlObject>(args, metadata);\r\n auto obj = std::make_shared<" + "facebook::jsi::Object>(rt);\r\n obj->setProperty(rt, \"sender\", rt.global().cr" + "eateFromHostObject(rt, objSender));\r\n obj->setProperty(rt, \"args\", rt.globa" + "l().createFromHostObject(rt, objArgs));\r\n\r\n metadata->JsiDispatchEvent(rt, " + "tag, std::string(eventName), obj);\r\n });\r\n }\r\n else {\r\n XamlUIService:" + ":FromContext(eai.context).DispatchEvent(eai.obj.try_as<xaml::FrameworkElement>()" + ", wEN.c_str(),\r\n [senderAsFE, args](const winrt::Microsoft::ReactNative::IJ" + "SValueWriter& evtDataWriter) {\r\n SerializeEventArgs(evtDataWriter, sender" + "AsFE, args);\r\n });\r\n }\r\n};\r\n\r\n/*static*/ const EventInfo EventInfo::xamlEv" + "entMap[] = {\r\n"); #line 58 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" foreach (var evt in Events) { #line default #line hidden this.Write(" {\""); #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName())); #line default #line hidden this.Write("\", [](const EventAttachInfo& eai, bool isWrapped, winrt::event_token token) noexc" + "ept {\r\n if (const auto& c = DoTheTypeChecking<"); #line 60 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetCppWinRTType(evt.DeclaringType))); #line default #line hidden this.Write(">(eai.obj, isWrapped)) {\r\n if (!token) {\r\n return c."); #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName())); #line default #line hidden this.Write("([eai] ("); #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetCppWinRTEventSignature(evt))); #line default #line hidden this.Write(") noexcept {\r\n DispatchTheEvent(eai, sender, args);\r\n });\r\n " + " } else {\r\n c."); #line 66 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName())); #line default #line hidden this.Write("(token);\r\n return winrt::event_token{ -1 };\r\n }\r\n }\r\n return wi" + "nrt::event_token{0};\r\n } },\r\n"); #line 72 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" } #line default #line hidden #line 73 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" foreach (var evt in SyntheticEvents) { #line default #line hidden this.Write(" {\""); #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.Name)); #line default #line hidden this.Write("\", nullptr /* synthetic event */},\r\n"); #line 75 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" } #line default #line hidden this.Write("};\r\n\r\nstatic_assert(ARRAYSIZE(EventInfo::xamlEventMap) == "); #line 78 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Events.Count() + SyntheticEvents.Count())); #line default #line hidden this.Write(@"); void JsEvent(winrt::Microsoft::ReactNative::IJSValueWriter const& constantWriter, std::wstring topName, std::wstring onName) { constantWriter.WritePropertyName(topName); constantWriter.WriteObjectBegin(); WriteProperty(constantWriter, L""registrationName"", onName); constantWriter.WriteObjectEnd(); } #define JS_EVENT(evtName) JsEvent(constantWriter, L""top"" L#evtName, L""on"" L#evtName) ConstantProviderDelegate GetEvents = [](winrt::Microsoft::ReactNative::IJSValueWriter const& constantWriter) { for (auto const& e : EventInfo::xamlEventMap) { auto wideName = std::wstring(winrt::to_hstring(e.name)); JsEvent(constantWriter, L""top"" + wideName, L""on"" + wideName); } }; void XamlMetadata::PopulateNativeEvents(winrt::Windows::Foundation::Collections::IMap<winrt::hstring, ViewManagerPropertyType>& nativeProps) const { for (const auto& evtInfo : EventInfo::xamlEventMap) { auto jsEvtName = L""on"" + winrt::to_hstring(evtInfo.name); nativeProps.Insert(jsEvtName, ViewManagerPropertyType::Boolean); } } "); return(this.GenerationEnvironment.ToString()); }
/// <summary> /// Create the template output /// </summary> public virtual string TransformText() { this.Write(@" /************************************************************* THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT MODIFY MANUALLY **************************************************************/ import type { ViewProps, NativeSyntheticEvent, ColorValue } from 'react-native'; import type * as Enums from './Enums'; export type Thickness = number | { left?: number, top?: number, right?: number, bottom?: number }; export type GridLength = number | '*' | 'auto' | `${number}*`; export type CornerRadius = number | { topLeft?: number, topRight?: number, bottomLeft?: number, bottomRight?: number}; export type Point = { x: number, y: number }; export type Color = { a: number, r: number, g: number, b: number }; export type TypedEvent<TArgs> = { sender: any; args: TArgs; } "); #line 29 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" foreach (var t in Util.eventArgsTypes) { var ns = Util.GetTSNamespace(t); if (ns != "") { #line default #line hidden this.Write("export namespace Native"); #line 32 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ns)); #line default #line hidden this.Write(" {\r\n"); #line 33 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden this.Write("export type Native"); #line 34 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(t))); #line default #line hidden this.Write(" = {\r\n"); #line 35 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" foreach (var m in Util.GetEventArgsMethods(t.GetFullName())) { #line default #line hidden this.Write(" "); #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(m)); #line default #line hidden this.Write("("); #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsMethodArgs(t, m))); #line default #line hidden this.Write("): "); #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsMethodReturnType(t, m))); #line default #line hidden this.Write("\r\n"); #line 37 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var prop in t.GetProperties().Where(p => Util.IsInstanceProperty(p))) { var tsType = Util.GetTypeScriptType(prop); if (tsType != "any") { #line default #line hidden this.Write(" readonly "); #line 42 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop))); #line default #line hidden this.Write(": "); #line 42 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(tsType)); #line default #line hidden this.Write(";\r\n"); #line 43 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } } #line default #line hidden this.Write("}\r\n"); #line 48 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" if (ns != "") { #line default #line hidden this.Write("}\r\n"); #line 50 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden #line 51 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden this.Write("\r\n"); #line 53 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" var derived = Util.GetDerivedTypes(Types); foreach (var type in Types) { #line default #line hidden #line 55 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" var ns = Util.GetTSNamespace(type); if (ns != "") { #line default #line hidden this.Write("export namespace Native"); #line 57 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(ns)); #line default #line hidden this.Write(" {\r\n"); #line 58 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden this.Write("export interface Native"); #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(type))); #line default #line hidden this.Write("Props extends "); #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetBaseClassProps(type))); #line default #line hidden this.Write(" {\r\n"); #line 60 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" var typeProp = Util.GetJsTypeProperty(type, derived); if (typeProp != "") { #line default #line hidden this.Write(" type: "); #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(typeProp)); #line default #line hidden this.Write(";\r\n"); #line 63 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var prop in type.GetProperties().Where(p => Util.ShouldEmitPropertyMetadata(p))) { #line default #line hidden this.Write(" "); #line 65 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop))); #line default #line hidden this.Write("?: "); #line 65 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop))); #line default #line hidden this.Write(";\r\n"); #line 66 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var prop in FakeProps.Where(p => type == p.DeclaringType)) { #line default #line hidden this.Write(" "); #line 68 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop))); #line default #line hidden this.Write("?: "); #line 68 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop))); #line default #line hidden this.Write("; // synthetic property\r\n"); #line 69 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var prop in SyntheticProps.Where(p => type == p.DeclaringType)) { #line default #line hidden this.Write(" /**\r\n * "); #line 72 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(prop.Comment)); #line default #line hidden this.Write("\r\n */\r\n "); #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop.Name))); #line default #line hidden this.Write("?: "); #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop))); #line default #line hidden this.Write("; // synthetic property\r\n"); #line 75 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var attachedDP in Util.AttachedProperties.Where(p => Properties.Any(sp => sp.Property == p && sp.DeclaringType == type))) { #line default #line hidden this.Write(" "); #line 77 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(attachedDP))); #line default #line hidden this.Write("?: "); #line 77 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(attachedDP))); #line default #line hidden this.Write("; // attached property\r\n"); #line 78 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var evt in type.GetEvents()) { #line default #line hidden this.Write(" on"); #line 80 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName())); #line default #line hidden this.Write("?: (event: NativeSyntheticEvent<"); #line 80 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsTSName(evt, "Native"))); #line default #line hidden this.Write(">) => void;\r\n"); #line 81 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } foreach (var evt in SyntheticEvents.Where(e => type == e.DeclaringType)) { #line default #line hidden this.Write(" on"); #line 83 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(evt.Name)); #line default #line hidden this.Write("?: (event: NativeSyntheticEvent<"); #line 83 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(evt))); #line default #line hidden this.Write(">) => void;\r\n"); #line 84 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden this.Write("}\r\n"); #line 86 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" if (ns != "") { #line default #line hidden this.Write("}\r\n"); #line 88 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden #line 89 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } #line default #line hidden this.Write("\r\nexport type XamlControlProps ="); #line 91 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" var first = true; foreach (var type in Types) { if (Util.HasCtor(type) || !type.IsSealed) { if (!first) #line default #line hidden { this.Write(" | "); } #line 93 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" ; first = false; #line default #line hidden this.Write(" "); #line 96 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetNativePropsName(type))); #line default #line hidden this.Write("\r\n\t"); #line 97 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt" } } #line default #line hidden this.Write(";\r\n\r\n\r\n"); return(this.GenerationEnvironment.ToString()); }