SushiScriptCore 1.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package SushiScriptCore --version 1.0.3
NuGet\Install-Package SushiScriptCore -Version 1.0.3
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="SushiScriptCore" Version="1.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SushiScriptCore --version 1.0.3
#r "nuget: SushiScriptCore, 1.0.3"
#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 SushiScriptCore as a Cake Addin
#addin nuget:?package=SushiScriptCore&version=1.0.3

// Install SushiScriptCore as a Cake Tool
#tool nuget:?package=SushiScriptCore&version=1.0.3

Sushi

Library for converting .NET classes to script classes.

Author: Jeroen Vorsselman @ 2023

GitHub

NuGet


Main features

  • Generates ECMAScript 5, ECMAScript 6 and TypeScript classes using .NET types.
  • Support for nested generic types.
  • Support for .NET Core.
  • Vastly improved compared to its predecessor.
  • Creates extended classes and their constructors.
  • Simple object mapping:
    • ES5 classes use (optional) _.extend from UnderscoreJS.
    • ES6 and TypeScript use Object.assign().
  • Allows custom datatype conversion.
  • Improved type dependency tree ordering.
  • Adds documentation from the XML file generated on project build.
  • 85% Code coverage.
  • Assigns explicitly specified default values for "simple" types. <br>

How to use

  1. Specify what types to use in an assembly by adding:
    1. An ConvertToScriptAttribute to the class, or;
    2. Inheriting from the IScriptModel interface.
    3. You can also exclude models using the IgnoreForScriptAttribute.
  2. Create an instance of the SushiConverter:
    1. SushiConverter(ICollection<Type> types) Create an instance using the given collection of types.
    2. SushiConverter(ICollection<Type> types, string assemblyDocPath) Delegates to #1 and adds a path to the XML documentation file.
    3. SushiConverter(params Type[] types) Delegates to #1.
    4. SushiConverter(Assembly assembly, string assemblyDocPath) Delegates to #1 using the assembly.ExportedTypes and adds a path to the XML documentation file.
    5. REMARK: All given types MUST inherit from the Interface or Attribute or they will be ignored.
  3. Create a ModelConverter for a specific language.

Example

var converter = new SushiConverter(assembly, xmlFilePath);
var indent = "\t";
var script = converter.TypeScript()
    .Convert(indent)
    .ConvertEnums()
    .ToString();

The following .NET class is used:

/// <summary>
///     Simple model to verify complex types.
/// </summary>
public sealed class TypeModel : ViewModel
{
	/// <summary>
	///     A nullable boolean.
	/// </summary>
	public bool? NullableBool { get; set; } = null;
	
	/// <summary>
	///     A nullable string, defaults to null.
	/// </summary>
	public string? NullableString { get; set; } = null;

	/// <summary>
	///     A readonly string.
	/// </summary>
	public readonly string ReadonlyString = "readonly";

	/// <inheritdoc cref="Guid" />
	public new Guid Guid { get; set; } = Guid.NewGuid();

	public StudentViewModel Student { get; set; } = new StudentViewModel();
	public List<StudentViewModel> Students { get; set; }
	public List<List<StudentViewModel>> StudentPerClass { get; set; }
}

To generate this TypeScript model:

/**
 * Simple model to verify complex types.
 * @typedef {Object} TypeModel
 * @extends ViewModel 
 */
export class TypeModel extends ViewModel {
    /** A nullable boolean. */
    NullableBool: boolean | null = null;
    /** A nullable string, defaults to null. */
    NullableString!: string;
    Student: StudentViewModel | null = null;
    Students: Array<StudentViewModel | null> = [];
    StudentPerClass: Array<Array<StudentViewModel | null>> = [];
    /** A readonly string. */
    ReadonlyString!: string;

    public constructor(value?: any) {
        super(value);

        if (!(value instanceof Object))
            return;

        this.NullableBool = value.NullableBool;
        this.NullableString = value.NullableString;
        this.Student = value.Student;
        this.Students = value.Students;
        this.StudentPerClass = value.StudentPerClass;
        this.ReadonlyString = value.ReadonlyString;
    }

    static mapFrom(obj: any): TypeModel {
        return Object.assign(new TypeModel(), obj);
    }
}
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.3.1 120 3/25/2024
1.3.0 117 3/25/2024
1.2.5 676 11/11/2023
1.2.4 388 11/11/2023
1.2.3 341 11/10/2023
1.2.2 344 11/10/2023
1.2.1 327 11/8/2023
1.2.0 367 11/8/2023
1.1.6 598 10/4/2023
1.1.5 623 8/16/2023
1.1.4 528 8/15/2023
1.1.3 591 5/16/2023
1.1.2 571 5/15/2023
1.1.1 538 5/15/2023
1.1.0 565 5/15/2023
1.0.9 594 5/10/2023
1.0.8 557 5/10/2023
1.0.7 565 5/10/2023
1.0.6 574 5/10/2023
1.0.5 698 1/14/2023
1.0.4 711 1/14/2023
1.0.3 701 1/12/2023
1.0.2 740 1/5/2023
1.0.1 711 1/5/2023
1.0.0 729 1/3/2023

- Simplified library interface > "new SushiConverter().ECMAScript6().Convert().ToString()".
     - Support for ECMAScript 5, ECMAScript 6 and TypeScript.
     - Classes have a simple object mapper "mapFrom", using Object.assign and _.extend for ES5.
     - Improved type dependency tree ordering.
     - Support for TypeScript enums.
     - Improved conversion for data types.