diff --git a/sails.io.js/index.d.ts b/sails.io.js/index.d.ts new file mode 100644 index 0000000000..193feb3e9b --- /dev/null +++ b/sails.io.js/index.d.ts @@ -0,0 +1,101 @@ +// Type definitions for sails.io.js 1.0.1 +// Project: http://sailsjs.org/documentation/reference/web-sockets/socket-client +// Definitions by: Arvitaly +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +declare namespace SailsIOJS { + export interface SDKInfo { + version?: string; + language?: string; + platform?: "browser" | "node"; + versionString?: string; + } + export interface ClientSails { + url?: string; + autoConnect?: boolean; + headers?: { [index: string]: string }; + transports?: Array<"websocket" | "polling">; + rejectUnauthorized?: boolean; + reconnection?: boolean; + reconnectionAttempts?: number; + reconnectionDelay?: number; + reconnectionDelayMax?: number; + useCORSRouteToGetCookie?: boolean; + query?: string; + path?: string; + // All logs are disabled when `io.sails.environment = 'production'` + environment?: "production" | string; + connect(url?: string, config?: ConnectConfig): Socket; + initialConnectionHeaders?: InitialConnectionHeaders; + strict?: boolean; + sdk?: SDKInfo; + } + export interface ConnectConfig { + initialConnectionHeaders?: InitialConnectionHeaders + } + export interface InitialConnectionHeaders { + nosession?: boolean; + } + export interface Client { + socket: Socket; + sails: ClientSails; + } + export interface Headers { [index: string]: string } + export interface RequestOptions { + url: string; + method?: string; + headers?: Headers; + params?: any; + data?: any; + } + export interface JWR { + headers: Headers; + statusCode: number; + body: any; + error?: Error; + toString: () => string; + toPOJO: () => { + body: any; + headers: Headers; + statusCode: number; + } + pipe: () => Error; + } + export type RequestCallback = { + (body: any, jwr: JWR): any; + } + export type Data = Object; + export interface Socket { + get(url: string, data?: Data): void; + get(url: string, cb?: RequestCallback): void; + get(url: string, data: Data, cb: RequestCallback): void; + post(url: string, data?: Data): void; + post(url: string, cb?: RequestCallback): void; + post(url: string, data: Data, cb: RequestCallback): void; + put(url: string, data?: Data): void; + put(url: string, cb?: RequestCallback): void; + put(url: string, data: Data, cb: RequestCallback): void; + delete(url: string, data?: Data): void; + delete(url: string, cb?: RequestCallback): void; + delete(url: string, data: Data, cb: RequestCallback): void; + request(options: RequestOptions, cb?: RequestCallback): void; + on(event: string, cb: (...args: Array) => any): Socket; + on(event: "connect", cb: () => any): Socket; + on(event: "disconnect", cb: () => any): Socket; + on(event: "reconnecting", cb: (numAttempts: number) => any): Socket; + on(event: "reconnect", cb: (transport: string, numAttempts: number) => any): Socket; + on(event: "error", cb: (err: any) => any): Socket; + off(event: string, cb: () => any): Socket + removeAllListeners(): Socket; + isConnecting(): boolean; + isConnected(): boolean; + reconnect(): Socket; + mightBeAboutToAutoConnect(): boolean; + replay(): Socket; + } +} +declare function SailsIOJS(client: SocketIOClientStatic): SailsIOJS.Client; +declare module 'sails.io.js' { + export = SailsIOJS; +} \ No newline at end of file diff --git a/sails.io.js/sails.io.js-tests.ts b/sails.io.js/sails.io.js-tests.ts new file mode 100644 index 0000000000..5350b0ae71 --- /dev/null +++ b/sails.io.js/sails.io.js-tests.ts @@ -0,0 +1,89 @@ +/// +import * as SocketIO from 'socket.io-client'; +import * as SailsIOJS from 'sails.io.js'; +const io = SailsIOJS(SocketIO); +io.sails.autoConnect = true; +io.sails.connect(); +io.sails.connect("url"); +io.sails.connect("url", {}); +io.sails.connect("url", { + initialConnectionHeaders: { + nosession: true + } +}); +io.sails.environment = "production"; +io.sails.headers = { "test": "1" }; +io.sails.initialConnectionHeaders = { nosession: false }; +io.sails.path = "path"; +io.sails.query = "query"; +io.sails.reconnection = true; +io.sails.reconnectionAttempts = 5; +io.sails.reconnectionDelay = 1; +io.sails.reconnectionDelayMax = 5; +io.sails.rejectUnauthorized = true; +io.sails.sdk = { + language: "lang", + platform: "node", + version: "1.0", + versionString: "1.0" +} +io.sails.strict = true; +io.sails.transports = ["websocket", "polling"]; +io.sails.url = "url1"; +io.sails.useCORSRouteToGetCookie = true; +io.socket.get("p"); +io.socket.get("p", {}); +io.socket.get("p", "test", (data: Date, jwr: any) => { + data.getDate(); + const a: SailsIOJS.JWR = jwr; +}); +io.socket.post("p"); +io.socket.post("p", { val: 1 }); +io.socket.put("p", "test", (data: number, jwr: any) => { + data.toFixed(); + const a: SailsIOJS.JWR = jwr; +}); +io.socket.put("p"); +io.socket.put("p", {}); +io.socket.post("p", "test", (data, jwr) => { + const a: SailsIOJS.JWR = jwr; +}); +io.socket.delete("p"); +io.socket.delete("p", {}); +io.socket.delete("p", "test", (data, jwr) => { + const a: SailsIOJS.JWR = jwr; +}); +io.socket.request({ url: "url" }); +io.socket.request({ url: "url" }, (data: number, jwr: any) => { + data.toExponential(); + jwr.body.toExponential(); + jwr.error.message; + jwr.pipe.apply(this); + jwr.statusCode.toFixed(); + const podo = jwr.toPOJO(); + podo.body.toExponential(); + podo.headers["test"] = "15"; + podo.statusCode = 200; + jwr.toString().charAt(0); +}) +io.socket.isConnected() === true; +io.socket.isConnecting() === true; +io.socket.mightBeAboutToAutoConnect() === false; +io.socket.on("connect", () => { }) + .on("disconnect", () => { + + }) + .on("reconnecting", (num) => { + num = 15; + }) + .on("reconnect", (transport, num) => { + transport.toLowerCase(); + num = 16; + }) + .on("error", (err) => { }) + .on("any", (a, b, c) => { + + }) + .removeAllListeners() + .off("error", () => { }) + .replay(); \ No newline at end of file diff --git a/sails.io.js/tsconfig.json b/sails.io.js/tsconfig.json new file mode 100644 index 0000000000..2e73761b08 --- /dev/null +++ b/sails.io.js/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "sails.io.js-tests.ts" + ] +} \ No newline at end of file