Fonlow.TypeScriptCodeDomCore
3.4.0
dotnet add package Fonlow.TypeScriptCodeDomCore --version 3.4.0
NuGet\Install-Package Fonlow.TypeScriptCodeDomCore -Version 3.4.0
<PackageReference Include="Fonlow.TypeScriptCodeDomCore" Version="3.4.0" />
paket add Fonlow.TypeScriptCodeDomCore --version 3.4.0
#r "nuget: Fonlow.TypeScriptCodeDomCore, 3.4.0"
// 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:
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:
- Strongly typed interfaces and function prototypes for validation during design time and compile time.
- 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.
- Naturally and inheriently adapt the evolution of the JavaScript standard as long as TypeScript will.
- 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:
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
- Client API codes with typed forms and validators generated from Web API
- OpenAPI to Angular 5+ and integration tests for pet.yaml
- OpenAPI to Angular Reactive Typed Forms
- OpenAPI to Aurelia and integration tests for pet.yaml
- OpenAPI to AXIOS and integration tests for pet.yaml
- OpenAPI to Fetch API and integration tests for pet.yaml
- OpenAPI to jQuery and integration tests for pet.yaml
TypeScript Code Generators
- Nuget package Strongly Typed Web API Client Generators and its plugins for JavaScript libraries and frameworks: jQuery, FetchAPI, AXIOS, Aurelia, Angular 2+, Angular Reactive Forms.
- Command Line Program Strongly Typed OpenAPI Client Generators whic also generates codes for Angular 2+, Angular Reactive Forms, Aurelia, AXIOS, FetchAPI and jQuery.
CodeDOM Features Applicable to TypeScript but not Supported in TypeScriptProvider
CodeDOM Features Not Applicable to TypeScript
- CodeAttachEventStatement
- CodeChecksumPragma
- CodeDefaultValueExpression
- CodeDelegateCreateExpression
- CodeDelegateInvokeExpression
- CodeDirectionExpression
- CodeEntryPointMethod
- CodeEventReferenceExpression
- CodeLinePragma
- CodeMemberEvent
- CodeNamespaceImport
- CodeNamespaceImportCollection
- CodePropertySetValueReferenceExpression
- CodeRemoveEventStatement
- CodeSnippetCompileUnit
- CodeTypeConstructor . Alternative.
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:
- Fonlow.TypeScriptCodeDom for .NET Framework and its Nuget package.
- Fonlow.TypeScriptCodeDomCore in WebApiClientGen
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. |
-
net9.0
- System.CodeDom (>= 9.0.0)
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 | 39 | 11/21/2024 |
3.3.0 | 1,122 | 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,588 | 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