Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        //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);
        }