private KeyValuePair <string, TSInterfaceDescription> ToTSInterfaceDescriptionBase(Members m, string typename, string helpString) { var ret = new TSInterfaceDescription(); string enumerableType = null; GetMembers(m, ref enumerableType, typename).AddRangeTo(ret.Members); if (!enumerableType.IsNullOrEmpty()) { enumerableCollectionItemMapping[new TSSimpleType(typename)] = enumerableType; } ret.JsDoc.Add("", helpString); if (ret.Members.NoneKVP((name, descr) => name == "")) { ret.IsClass = true; ret.MakeFinal(); } else { ret.IsClass = false; } var kvp = KVP(typename, ret); if (ret.IsClass) { kvp.MakeNominal(); } return(kvp); }
private KeyValuePair <string, TSInterfaceDescription> ToTSInterfaceDescription(RecordInfo r) { var ret = new TSInterfaceDescription(); var typename = $"{r.Parent.Name}.{r.Name}"; string enumerableType = null; //this value will be ignored for RecordInfo GetMembers(r.Members, ref enumerableType, typename).AddRangeTo(ret.Members); ret.JsDoc.Add("", r.HelpString); return(KVP(typename, ret)); }
//ActiveXObject.on(obj: 'Word.Application', 'BeforeDocumentSave', ['Doc','SaveAsUI','Cancel'], function (params) {}); private TSMemberDescription ToActiveXEventMember(MemberInfo m, CoClassInfo c) { var @namespace = c.Parent.Name; var eventName = m.Name; var args = m.Parameters.Cast().Select(x => KVP(x.Name, (type: GetTypeName(x.VarTypeInfo, true), @readonly: !x.IsByRef()))).ToList(); ITSType argnamesType; ITSType parameterType; if (args.None()) { argnamesType = null; parameterType = TSObjectType.PlainObject; } else if (args.Count <= 5) { argnamesType = new TSTupleType(args.Keys().Select(x => $"'{x}'")); parameterType = new TSObjectType(args); } else { var alias = new TSAliasDescription() { TargetType = new TSTupleType(args.Keys().Select(x => $"'{x}'")) }; var param = new TSInterfaceDescription(); args.SelectKVP((key, value) => KVP(key, new TSMemberDescription() { ReturnType = value.type, ReadOnly = value.@readonly })).AddRangeTo(param.Members); var helperTypeKey = $"{@namespace}.EventHelperTypes.{c.Name}_{eventName}"; if (!eventHelperTypes.TryGetValue(helperTypeKey, out var helperTypes)) { helperTypes = (alias, param); eventHelperTypes.Add(helperTypeKey, helperTypes); } else if (!helperTypes.argNamesType.Equals(alias) || !helperTypes.parameterType.Equals(param)) { Debugger.Break(); } argnamesType = (TSSimpleType)$"{@namespace}.EventHelperTypes.{c.Name}_{eventName}_ArgNames"; parameterType = (TSSimpleType)$"{@namespace}.EventHelperTypes.{c.Name}_{eventName}_Parameter"; } var eventsourceType = $"{@namespace}.{c.Name}"; var ret = new TSMemberDescription(); ret.AddParameter("obj", $"{eventsourceType}"); ret.AddParameter("event", $"'{eventName}'"); if (argnamesType != null) { ret.AddParameter("argNames", argnamesType); } //build the handler parameter type var memberDescr = new TSMemberDescription(); var fnType = new TSFunctionType(memberDescr); memberDescr.AddParameter("this", eventsourceType); memberDescr.AddParameter("parameter", parameterType); memberDescr.ReturnType = TSSimpleType.Void; ret.AddParameter("handler", fnType); ret.ReturnType = TSSimpleType.Void; return(ret); }