Example #1
0
        /// <summary>
        /// Transpiles the specified .NET type definitions to new source code.
        /// </summary>
        /// <param name="types">Types that should be transpiled.</param>
        /// <returns>The result of the transpilation process.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="types"/> is null.</exception>
        public TranspilationResult Transpile(IEnumerable <Type> types)
        {
            if (types == null)
            {
                throw new ArgumentNullException(nameof(types));
            }

            // Only translate type definitions that are
            // not mapped to custom TypeScript types.
            types = types.Where(t => !_configuration.CustomTypeMaps.Any(m => m.MapsType(t)));

            var result = new TranspilationResult(types.Select(_typeDefinitionTranslator.Translate));

            return(TranspileDependencies(result));
        }
Example #2
0
        private TranspilationResult TranspileDependencies(TranspilationResult currentResult)
        {
            while (currentResult.GetUnresolvedDependencies().Any())
            {
                var codeFragments = new List <CodeFragment>();
                foreach (var dependency in currentResult.GetUnresolvedDependencies())
                {
                    if (!dependency.TryRecreateClrType(out var type))
                    {
                        throw new InvalidOperationException($"Detected unresolvable dependency that could not be transpiled: {dependency}");
                    }

                    codeFragments.Add(_typeDefinitionTranslator.Translate(type));
                }

                currentResult = currentResult.AddCodeFragments(codeFragments);
            }

            return(currentResult);
        }