Fonlow.TypeScriptCodeDomCore 3.4.0

dotnet add package Fonlow.TypeScriptCodeDomCore --version 3.4.0                
NuGet\Install-Package Fonlow.TypeScriptCodeDomCore -Version 3.4.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fonlow.TypeScriptCodeDomCore" Version="3.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fonlow.TypeScriptCodeDomCore --version 3.4.0                
#r "nuget: Fonlow.TypeScriptCodeDomCore, 3.4.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Fonlow.TypeScriptCodeDomCore as a Cake Addin
#addin nuget:?package=Fonlow.TypeScriptCodeDomCore&version=3.4.0

// Install Fonlow.TypeScriptCodeDomCore as a Cake Tool
#tool nuget:?package=Fonlow.TypeScriptCodeDomCore&version=3.4.0                

CodeDOM in .NET (Framework) has come with 3 providers:

  1. CSharpCodeProvider
  2. VBCodeProvider
  3. JScriptCodeProvider

While JSCriptCodeProvider is good enough for generating JavaScript codes for Internet Explorer however IE had been discoutinued. TypeScriptCodeProvider provides extra benefits over a "JavaScript Provider" through generating TypeScript codes:

  1. Strongly typed interfaces and function prototypes for validation during design time and compile time.
  2. Re-use some portions of CodeDOM codes if a code generator toolset like WebApiClientGen and OpenApiClientGen targets multiple OO languages and multiple TypeScript libraries/frameworks.
  3. Naturally and inheriently adapt the evolution of the JavaScript standard as long as TypeScript will.
  4. Live well with TypeScript frameworks like Angular 2+ and Aurelia. And with Angular Reactive Forms, runtime validation could become possible, similar to the use cases of using validation attributes to decorate a member property of a .NET class.

Nuget package:

TypeScript CodeDOM logo

What For and Not

TypeScript CodeDOM is for code generators that use CodeDOM over template or Roslyn, for example, Fonlow.Poco2TS that reads an assembly with POCO classes, and WebApiClientGen that reads assemblies and the run time type info of a running Web API, and then create Code DOM that could be used to generate C# and TypeScript codes.

There are scenarios that Roslyn and template may provide more powerful features that you want and help you to write less codes with simpler design when developing the code generators.

What Supported and Not

CodeDOM covers almost every essential C# language features, however, not every features of such coverage is applicable to TypeScript.

GeneratorSupport Enum

bool ICodeGenerator.Supports(GeneratorSupport supports)
{
	return (supports & supported) != 0;
}

const GeneratorSupport supported = GeneratorSupport.ArraysOfArrays
	| GeneratorSupport.MultidimensionalArrays
	| GeneratorSupport.TryCatchStatements
	| GeneratorSupport.DeclareValueTypes
	| GeneratorSupport.DeclareEnums
	| GeneratorSupport.StaticConstructors
	| GeneratorSupport.DeclareInterfaces
	| GeneratorSupport.DeclareDelegates
	| GeneratorSupport.NestedTypes
	| GeneratorSupport.MultipleInterfaceMembers
	| GeneratorSupport.ComplexExpressions
	| GeneratorSupport.GenericTypeReference
	| GeneratorSupport.GenericTypeDeclaration
   ;

Supported CodeDOM Classes

Most supported classes are covered by unit testing, while some are covered by integration testing in some code generator projects, marked as "Indirectly" in the table below.

Class Unit Tests
CodeArgumentReferenceExpression TestCodeArgumentReferenceExpression
CodeArrayCreateExpression TestCodeArrayCreateExpression*
CodeArrayIndexerExpression TestCodeArrayIndexerExpression*
CodeAssignStatement TestCodeAssignStatement
CodeAttributeDeclaration / CodeAttributeDeclarationCollection Test*Decorators
CodeAttributeArgument / CodeAttributeArgumentCollection Indirectly
CodeBaseReferenceExpression TestCodeBaseReferenceExpression
CodeBinaryOperatorExpression TestCodeIterationStatement
CodeBinaryOperatorType TestCodeIterationStatement
CodeCastExpression TestCodeCastExpression
CodeCatchClause / CodeCatchClauseCollection TestCodeTryCatchFinallyStatement, TestCodeTryCatchFinallyStatement
CodeCommentStatement / CodeCommentStatementCollection TestCodeCommentStatement*
CodeCompileUnit Indirectly
CodeConditionStatement TestCodeConditionStatement*
CodeConstructor Indirectly
CodeDirective / CodeDirectiveCollection Indirectly with CodeRegionDirective
CodeTypeDelegate TestCodeTypeDelegate
CodeExpressionStatement TestCodeIterationStatement
CodeExpression TestCodeExpression
CodeExpressionCollection Indirectly
CodeFieldReferenceExpression TestCodeFieldReferenceExpression
CodeIndexerExpression TestCodeIterationStatement
CodeIterationStatement TestCodeIterationStatement
CodeMemberField TestCodeTypeDeclarationWithMembers
CodeMemberMethod TestCodeTypeDeclarationWithMethodAndParameterDecorators
CodeMemberProperty TestCodeTypeDeclarationWithPropertyMembers
CodeMethodInvokeExpression TestCodeIterationStatement, TestCodeTryCatchFinallyStatement, TestCodeTryCatchStatement
CodeMethodReferenceExpression TestCodeMethodReferenceExpression, TestCodeMethodReferenceExpressionGeneric, TestCodeIterationStatement
CodeMethodReturnStatement TestCodeMethodReturnStatement
CodeNamespace / CodeNamespaceCollection Indirectly
CodeObject Indirectly in many derived classes
CodeObjectCreateExpression TestCodeObjectCreateExpression*
CodeParameterDeclarationExpression / CodeParameterDeclarationExpressionCollection TestTuple4Callback, TestTupleCallbackSnipet, TestTupleCallbackSnipet, TestCodeParameterDeclarationExpression
CodePrimitiveExpression TestCodeArrayCreateExpressionWithInit, and many
CodePropertyReferenceExpression TestCodePropertyReferenceExpression
CodeRegionDirective TestPersonWithRegions, Test2TypesWithRegions
CodeSnippetExpression TestCodeArrayIndexerExpression, and many
CodeSnippetStatement TestCodeConditionStatement, and many
CodeSnippetTypeMember Indirectly
CodeStatement / CodeStatementCollection TestCodeConditionStatementElse, and many
CodeThisReferenceExpression TestCodePropertyReferenceExpression, and many
CodeThrowExceptionStatement TestCodeThrowExceptionStatement
CodeTryCatchFinallyStatement TestCodeTryCatchFinallyStatement, TestCodeTryFinallyStatement, TestCodeTryCatchStatement
CodeTypeDeclaration TestCodeTypeDeclaration*
CodeTypeDeclarationCollection Indirectly with namespace.Types
CodeTypeMember / CodeTypeMemberCollection Indirectly
CodeTypeOfExpression TestCodeTypeOfExpression
CodeTypeParameter / CodeTypeParameterCollection Indirectly
CodeTypeReference / CodeTypeReferenceCollection TestCodeArrayCreateExpressionWithoutInit, and many
CodeTypeReferenceExpression TestCodeTypeReferenceExpression, TestCodeIterationStatement
CodeVariableDeclarationStatement TestCodeVariableDeclarationStatement*
CodeVariableReferenceExpression TestCodeVariableReferenceExpression, and many

Hints:

  • There are integration tests in PocoToTS, WebApiClientGen and OpenApiClientGen, covering some classes like XxxCollection.
Examples Utilizing TypeScriptProvider
Generated Code Examples
TypeScript Code Generators

CodeDOM Features Applicable to TypeScript but not Supported in TypeScriptProvider

CodeDOM Features Not Applicable to TypeScript

History

TypeScript CodeDOM had been a by-product of Strongly Typed Web API Client Generators since October 2015 until February 2024, as a foundation library of TypeScript code generators of WebApiClientGen and then OpenApiClientGen, as well as internal code generators in some companies in which the development teams have chosen the CodeDOM approach over templates.

Legacy repositories:

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Fonlow.TypeScriptCodeDomCore:

Package Downloads
Fonlow.Poco2TsCore

Generate data model interfaces in TypsScript from POCO classes. This has been used in POCO2TS.exe and Strongly Typed Client API for Web API.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Fonlow.TypeScriptCodeDomCore:

Repository Stars
zijianhuang/webapiclientgen
Strongly Typed Client API Generators generate strongly typed client APIs in C# .NET and in TypeScript for jQuery and Angular 2+ from ASP.NET Web API and .NET Core Web API
Version Downloads Last updated
3.4.0 44 11/21/2024
3.3.0 1,123 6/23/2024
3.2.2 365 6/12/2024
3.2.1 1,508 2/27/2024
3.2.0 305 2/21/2024
3.1.1 351 2/10/2024
3.1.0 212 2/9/2024
3.0.0 309 2/1/2024
2.9.2 557 12/17/2023
2.9.1 289 12/16/2023
2.9.0 461 12/15/2023
2.8.1 313 11/7/2023
2.8.0 402 11/7/2023
2.7.0 905 11/16/2022
2.6.1 5,589 6/14/2022
2.6.0 3,120 2/5/2022
2.5.0 3,019 2/12/2021
2.3.2 2,857 6/28/2020
2.3.1 3,927 4/16/2020
2.3.0 6,894 2/16/2020
2.2.1 520 2/16/2020
2.2.0 3,779 11/26/2019
2.1.0 2,649 11/11/2019
2.0.1 10,795 12/6/2018
2.0.0 1,605 9/1/2018
1.9.1 2,254 8/27/2018
1.9.0 1,707 8/9/2018
1.8.1 2,893 5/7/2018

.NET 9