Skip to content
/ SRTS Public
forked from muratg/SRTS

SignalR TypeScript declarations file generator

License

Notifications You must be signed in to change notification settings

slovely/SRTS

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SRTS

SignalR-TypeScript declarations generator

WHAT

This tool generates TypeScript declarations files for your SignalR hubs

WHY

You might want to write your SignalR client code in TypeScript instead of JavaScript for obvious reasons. Some of the benefits are:

  • Dev/build time type checking. This is especially helpful when the churn in your code is high
  • Better tooling support. While intellisense for JavaScript is getting better, it's not on par with TypeScript

FORKED (by slovely)

This fork modifies SRTS in the following way:

  • Supports strongly-typed hubs (i.e. hubs that derive from Hub)
  • More return/parameter types are supported - included generics.
  • No longer generates definitions for return/parameter types. The assumption is that these will be produced by another tool (for example: https://bitbucket.org/LukasKabrt/typelite/)

HOW

Using NuGet

  • Install SRTS NuGet package
  • types.tt and signalr.d.ts files are generated in your project. You can move them / rename them if you want
  • Definition of your types will be generated in types.d.ts file. You can reference this file from your .ts files
  • A basic piece "starter" code is provided on top of types.d.ts file. You can copy paste this code to your .ts file

Using command line tool

  • srts.exe installed in project packages folder (installed with the srts NuGet package,) and can be taken from there
  • Copy srts.exe to the folder where your assembly is in
  • Run "srts.exe ASSEMBLYNAME.DLL > myTypes.d.ts"

FEATURES

In addition to supporting all basic types, SRTS also supports:

  • Tuple
  • Nullable types
  • Task results
  • List and Array like types (IEnumerable, etc...)
  • Dictionary like types
  • Enums
  • Custom classes/interfaces

SAMPLE OUTPUT

Sample output from StockTicker

/* Sample code -- create a .ts file, and paste the following to get started

/// <reference path="types.d.ts" />
/// <reference path="signalr.d.ts" />

//  ---- Change the name name of d.ts file above based on your .tt file ---- 
var stockTicker: IStockTickerHubProxy = (<any>$.connection).stockTicker;
$.connection.hub.start().done((a) => {
	alert('connected.'); // .... 
});

*/

// Client interfaces
// These are expected to be defined by the user elsewhere
// (This file is auto-generated)
interface IStockTickerHubClient { /* To be defined elsewhere... */ }

// Promise interface
interface IPromise<T> {
	done(cb: (result: T) => any): IPromise<T>;
	error(cb: (error: any) => any): IPromise<T>;
}

// Data interfaces 
interface Stock {
	Symbol: string;
	DayOpen: number;
	DayLow: number;
	DayHigh: number;
	LastChange: number;
	Change: number;
	PercentChange: number;
	Price: number;
}

// Hub interfaces 
interface IStockTickerHub {
	getAllStocks(): IPromise<Array<Stock>>;
	getMarketState(): IPromise<string>;
	openMarket(): IPromise<void>;
	closeMarket(): IPromise<void>;
	reset(): IPromise<void>;
}

// Generetated proxies 
interface IStockTickerHubProxy {
	 server: IStockTickerHub;
	 client: IStockTickerHubClient;
}

Sample output from JabbR

// Client interfaces
// These are expected to be defined by the user elsewhere
// (This file is auto-generated)
interface IMonitorClient { /* To be defined elsewhere... */ }
interface IChatClient { /* To be defined elsewhere... */ }

// Promise interface
interface IPromise<T> {
	done(cb: (result: T) => any): IPromise<T>;
	error(cb: (error: any) => any): IPromise<T>;
}

// Data interfaces 
interface ClientMessage {
	Id: string;
	Content: string;
	Room: string;
}
interface UserViewModel {
	Name: string;
	Hash: string;
	Active: boolean;
	Status: string;
	Note: string;
	AfkNote: string;
	IsAfk: boolean;
	Flag: string;
	Country: string;
	LastActivity: string;
	IsAdmin: boolean;
}
interface LobbyRoomViewModel {
	Name: string;
	Count: number;
	Private: boolean;
	Closed: boolean;
	Topic: string;
}
interface MessageViewModel {
	HtmlEncoded: boolean;
	Id: string;
	Content: string;
	HtmlContent: string;
	When: string;
	User: UserViewModel;
	MessageType: number;
	ImageUrl: string;
	Source: string;
}
interface RoomViewModel {
	Name: string;
	Count: number;
	Private: boolean;
	Topic: string;
	Closed: boolean;
	Welcome: string;
	Users: Array<UserViewModel>;
	Owners: Array<string>;
	RecentMessages: Array<MessageViewModel>;
}
interface ClientNotification {
	Room: string;
	ImageUrl: string;
	Source: string;
	Content: string;
}

// Hub interfaces 
interface IMonitor {
}
interface IChat {
	onConnected(): IPromise<void>;
	join(): IPromise<void>;
	join(reconnecting: boolean): IPromise<void>;
	send(content: string, roomName: string): IPromise<boolean>;
	send(clientMessage: ClientMessage): IPromise<boolean>;
	getUserInfo(): IPromise<UserViewModel>;
	onReconnected(): IPromise<void>;
	onDisconnected(): IPromise<void>;
	getCommands(): IPromise<any>;
	getShortcuts(): IPromise<any>;
	getRooms(): IPromise<Array<LobbyRoomViewModel>>;
	getPreviousMessages(messageId: string): IPromise<Array<MessageViewModel>>;
	getRoomInfo(roomName: string): IPromise<RoomViewModel>;
	postNotification(notification: ClientNotification): IPromise<void>;
	postNotification(notification: ClientNotification, executeContentProviders: boolean): IPromise<void>;
	typing(roomName: string): IPromise<void>;
	updateActivity(): IPromise<void>;
}

// Generetated proxies 
interface IMonitorProxy {
	 server: IMonitor;
	 client: IMonitorClient;
}
interface IChatProxy {
	 server: IChat;
	 client: IChatClient;
}

Sample output from ShootR

/* Sample code -- create a .ts file, and paste the following to get started

/// <reference path="types.d.ts" />
/// <reference path="signalr.d.ts" />

//  ---- Change the name name of d.ts file above based on your .tt file ---- 
var h: IGameHubProxy = (<any>$.connection).h;
$.connection.hub.start().done((a) => {
	alert('connected.'); // .... 
});

*/

// Client interfaces
// These are expected to be defined by the user elsewhere
// (This file is auto-generated)
interface IGameHubClient { /* To be defined elsewhere... */ }

// Promise interface
interface IPromise<T> {
	done(cb: (result: T) => any): IPromise<T>;
	error(cb: (error: any) => any): IPromise<T>;
}

// Data interfaces 

// Hub interfaces 
interface IGameHub {
	onConnected(): IPromise<void>;
	onReconnected(): IPromise<void>;
	onDisconnected(): IPromise<void>;
	ping(): IPromise<string>;
	fire(): IPromise<number>;
	startFire(): IPromise<void>;
	stopFire(): IPromise<number>;
	initializeClient(registrationID: string): IPromise<any>;
	initializeController(registrationID: string): IPromise<any>;
	readyForPayloads(): IPromise<void>;
	resetMovement(movementList: Array<string>, pingBack: boolean, commandID: number): IPromise<void>;
	startAndStopMovement(toStop: string, toStart: string, pingBack: boolean, commandID: number): IPromise<void>;
	registerMoveStart(movement: string, pingBack: boolean, commandID: number): IPromise<void>;
	registerMoveStop(movement: string, pingBack: boolean, commandID: number): IPromise<void>;
	registerAbilityStart(abilityName: string, pingBack: boolean, commandID: number): IPromise<void>;
	registerAbilityStop(abilityName: string, pingBack: boolean, commandID: number): IPromise<void>;
	registerAbilityStop(ability: string): IPromise<void>;
	changeViewport(viewportWidth: number, viewportHeight: number): IPromise<void>;
	readyForLeaderboardPayloads(): IPromise<void>;
	stopLeaderboardPayloads(): IPromise<void>;
}

// Generetated proxies 
interface IGameHubProxy {
	 server: IGameHub;
	 client: IGameHubClient;
}

About

SignalR TypeScript declarations file generator

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%