SushiScriptCore 1.0.1

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

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

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.
  • 84% Code coverage. <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 script = converter.TypeScript()
    .Convert()
    .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 boolean.
	/// </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;
	/** A nullable boolean. */
	NullableString: string;
	Student: StudentViewModel | null;
	Students: Array<StudentViewModel | null>;
	StudentPerClass: Array<Array<StudentViewModel | null>>;
	/** A readonly string. */
	ReadonlyString: string;

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

		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.