import { InjectionToken , ModuleWithProviders , NgModule } from '@angular/core' ; import { SocketIO } from '../socketio' ; export interface IOOptions { compress ? : boolean ; debug ? : boolean ; query ? : { [ key ] : any ; } ; cookie ? : string [ ] ; extraHeaders ? : { [ key ] : any ; } ; forceNew ? : boolean ; forcePolling ? : boolean ; forceWebsockets ? : boolean ; log ? : boolean ; path ? : string ; reconnects ? : boolean ; reconnectAttempts ? : number ; reconnectWait ? : number ; secure ? : boolean ; } export type SocketIOOptions = Partial < IOOptions > ; export const SOCKETIO_URL = new InjectionToken < string > ( 'SOCKETIO_URL' ) ; export const SOCKETIO_OPTIONS = new InjectionToken < SocketIOOptions > ( 'SOCKETIO_OPTIONS' ) ; export function socketIOFactory ( url , options ) { return new SocketIO ( url , options ) ; } @ NgModule ( ) export class SocketIOModule { static forRoot ( url , options = { } ) { return { ngModule : SocketIOModule , providers : [ { provide : SocketIO , useFactory : socketIOFactory , deps : [ SOCKETIO_URL , SOCKETIO_OPTIONS ] } , { provide : SOCKETIO_URL , useValue : url } , { provide : SOCKETIO_OPTIONS , useValue : options } , ] } ; } }