Socket
Socket
Sign inDemoInstall

socket-controllers

Package Overview
Dependencies
39
Maintainers
3
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.4 to 0.0.5-beta

10

decorators.d.ts

@@ -7,3 +7,3 @@ import { ClassTransformOptions } from "class-transformer";

*/
export declare function SocketController(namespace?: string): (object: Function) => void;
export declare function SocketController(namespace?: string | RegExp): (object: Function) => void;
/**

@@ -48,2 +48,10 @@ * Registers controller's action to be executed when socket receives message with given name.

/**
* Injects parameters of the connected socket namespace.
*/
export declare function NspParams(): (object: Object, methodName: string, index: number) => void;
/**
* Injects named param from the connected socket namespace.
*/
export declare function NspParam(name: string): (object: Object, methodName: string, index: number) => void;
/**
* Injects rooms of the connected socket client.

@@ -50,0 +58,0 @@ */

@@ -170,2 +170,37 @@ "use strict";

/**
* Injects parameters of the connected socket namespace.
*/
function NspParams() {
return function (object, methodName, index) {
var format = Reflect.getMetadata("design:paramtypes", object, methodName)[index];
var metadata = {
target: object.constructor,
method: methodName,
index: index,
type: ParamTypes_1.ParamTypes.NAMESPACE_PARAMS,
reflectedType: format
};
index_1.defaultMetadataArgsStorage().params.push(metadata);
};
}
exports.NspParams = NspParams;
/**
* Injects named param from the connected socket namespace.
*/
function NspParam(name) {
return function (object, methodName, index) {
var format = Reflect.getMetadata("design:paramtypes", object, methodName)[index];
var metadata = {
target: object.constructor,
method: methodName,
index: index,
type: ParamTypes_1.ParamTypes.NAMESPACE_PARAM,
reflectedType: format,
value: name
};
index_1.defaultMetadataArgsStorage().params.push(metadata);
};
}
exports.NspParam = NspParam;
/**
* Injects rooms of the connected socket client.

@@ -172,0 +207,0 @@ */

15

index.js

@@ -35,6 +35,13 @@ "use strict";

// second import all controllers and middlewares and error handlers
var controllerClasses;
if (options && options.controllers && options.controllers.length)
DirectoryExportedClassesLoader_1.importClassesFromDirectories(options.controllers);
if (options && options.middlewares && options.middlewares.length)
DirectoryExportedClassesLoader_1.importClassesFromDirectories(options.middlewares);
controllerClasses = options.controllers.filter(function (controller) { return controller instanceof Function; });
var controllerDirs = options.controllers.filter(function (controller) { return typeof controller === "string"; });
controllerClasses.push.apply(controllerClasses, DirectoryExportedClassesLoader_1.importClassesFromDirectories(controllerDirs));
var middlewareClasses;
if (options && options.middlewares && options.middlewares.length) {
middlewareClasses = options.middlewares.filter(function (controller) { return controller instanceof Function; });
var middlewareDirs = options.middlewares.filter(function (controller) { return typeof controller === "string"; });
middlewareClasses.push.apply(middlewareClasses, DirectoryExportedClassesLoader_1.importClassesFromDirectories(middlewareDirs));
}
if (options.useClassTransformer !== undefined) {

@@ -49,3 +56,3 @@ executor.useClassTransformer = options.useClassTransformer;

// run socket controller register and other operations
executor.execute();
executor.execute(controllerClasses, middlewareClasses);
}

@@ -52,0 +59,0 @@ // -------------------------------------------------------------------------

@@ -12,3 +12,3 @@ /**

*/
namespace?: string;
namespace?: string | RegExp;
}

@@ -15,5 +15,5 @@ import { ActionMetadata } from "./ActionMetadata";

*/
namespace: string;
namespace: string | RegExp;
constructor(args: SocketControllerMetadataArgs);
readonly instance: any;
}
/**
* Controller action's parameter type.
*/
export declare type ParamType = "custom" | "connected_socket" | "socket_body" | "socket_query_param" | "socket_io" | "socket_id" | "socket_request" | "socket_rooms";
export declare type ParamType = "custom" | "connected-socket" | "socket-body" | "socket-query-param" | "socket-io" | "socket-id" | "socket-request" | "socket-rooms" | "namespace-params" | "namespace-param";
/**

@@ -13,6 +13,8 @@ * Controller action's parameter type.

static SOCKET_QUERY_PARAM: ParamType;
static SOCKET_IO: string;
static SOCKET_ID: string;
static SOCKET_REQUEST: string;
static SOCKET_ROOMS: string;
static SOCKET_IO: ParamType;
static SOCKET_ID: ParamType;
static SOCKET_REQUEST: ParamType;
static SOCKET_ROOMS: ParamType;
static NAMESPACE_PARAMS: ParamType;
static NAMESPACE_PARAM: ParamType;
}

@@ -10,9 +10,11 @@ "use strict";

ParamTypes.CUSTOM = "custom";
ParamTypes.CONNECTED_SOCKET = "connected_socket";
ParamTypes.SOCKET_BODY = "socket_body";
ParamTypes.SOCKET_QUERY_PARAM = "socket_query_param";
ParamTypes.SOCKET_IO = "socket_io";
ParamTypes.SOCKET_ID = "socket_id";
ParamTypes.SOCKET_REQUEST = "socket_request";
ParamTypes.SOCKET_ROOMS = "socket_rooms";
ParamTypes.CONNECTED_SOCKET = "connected-socket";
ParamTypes.SOCKET_BODY = "socket-body";
ParamTypes.SOCKET_QUERY_PARAM = "socket-query-param";
ParamTypes.SOCKET_IO = "socket-io";
ParamTypes.SOCKET_ID = "socket-id";
ParamTypes.SOCKET_REQUEST = "socket-request";
ParamTypes.SOCKET_ROOMS = "socket-rooms";
ParamTypes.NAMESPACE_PARAMS = "namespace-params";
ParamTypes.NAMESPACE_PARAM = "namespace-param";
return ParamTypes;

@@ -19,0 +21,0 @@ }());

/**
* Action result handler type.
*/
export declare type ResultType = "emit_on_success" | "emit_on_fail" | "skip_emit_on_empty_result";
export declare type ResultType = "emit-on-success" | "emit-on-fail" | "skip-emit-on-empty-result";
/**

@@ -6,0 +6,0 @@ * Static access to result handler types.

@@ -9,5 +9,5 @@ "use strict";

}
ResultTypes.EMIT_ON_SUCCESS = "emit_on_success";
ResultTypes.EMIT_ON_FAIL = "emit_on_fail";
ResultTypes.SKIP_EMIT_ON_EMPTY_RESULT = "skip_emit_on_empty_result";
ResultTypes.EMIT_ON_SUCCESS = "emit-on-success";
ResultTypes.EMIT_ON_FAIL = "emit-on-fail";
ResultTypes.SKIP_EMIT_ON_EMPTY_RESULT = "skip-emit-on-empty-result";
return ResultTypes;

@@ -14,0 +14,0 @@ }());

{
"name": "socket-controllers",
"private": false,
"version": "0.0.4",
"version": "0.0.5-beta",
"description": "Use class-based controllers to handle websocket events",

@@ -9,3 +9,3 @@ "license": "MIT",

"main": "index.js",
"tags": [
"keywords": [
"websocket",

@@ -16,3 +16,5 @@ "websockets",

"typescript-websockets",
"socket-controllers"
"socket-controllers",
"socket.io",
"socket-server"
],

@@ -23,2 +25,8 @@ "author": {

},
"contributors": [
{
"name": "Rustam Mamadaminov",
"email": "rmamdaminov@gmail.com"
}
],
"repository": {

@@ -37,2 +45,3 @@ "type": "git",

"class-transformer": "^0.1.6",
"path-to-regexp": "^3.0.0",
"reflect-metadata": "^0.1.10",

@@ -39,0 +48,0 @@ "socket.io": "^2.0.1"

@@ -65,8 +65,10 @@ # socket-controllers

import {createSocketServer} from "socket-controllers";
import "./MessageController"; // we need to "load" our controller before call createSocketServer. this is required
import {MessageController} from "./MessageController";
createSocketServer(3001);
createSocketServer(3001, {
controllers: [MessageController]
});
```
3. Now you can send `save` websocket message using webosocket-client.
3. Now you can send `save` websocket message using websocket-client.

@@ -314,3 +316,3 @@ ## More usage examples

import "reflect-metadata"; // this shim is required
import {createSocketServer, loadControllers} from "socket-controllers";
import {createSocketServer} from "socket-controllers";

@@ -333,2 +335,11 @@ createSocketServer(3000, {

Also you can use dynamic namespace, like `express router` patterns:
```javascript
@SocketController("/messages/:userId")
export class MessageController {
// ...
}
```
## Using middlewares

@@ -356,3 +367,3 @@

Controllers and middlewares should be loaded globally, before app bootstrap:
Controllers and middlewares should be loaded:

@@ -362,5 +373,8 @@ ```javascript

import {createSocketServer} from "socket-controllers";
import "./MessageController";
import "./MyMiddleware"; // here we load it
let io = createSocketServer(3000);
import {MessageController} from "./MessageController";
import {MyMiddleware} from "./MyMiddleware"; // here we import it
let io = createSocketServer(3000, {
controllers: [MessageController],
middlewares: [MyMiddleware]
});
```

@@ -372,6 +386,6 @@

import "reflect-metadata";
import {createSocketServer, loadControllers} from "socket-controllers";
import {createSocketServer} from "socket-controllers";
let io = createSocketServer(3000, {
controllers: [__dirname + "/controllers/**/*.js"],
middlewareDirs: [__dirname + "/middlewares/**/*.js"]
middlewares: [__dirname + "/middlewares/**/*.js"]
});

@@ -398,3 +412,3 @@ ```

controllers: [__dirname + "/controllers/*.js"],
middlewareDirs: [__dirname + "/middlewares/*.js"]
middlewares: [__dirname + "/middlewares/*.js"]
});

@@ -421,3 +435,3 @@ ```

|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `@SocketController(namespace?: string)` | Registers a class to be a socket controller that can listen to websocket events and respond to them. |
| `@SocketController(namespace?: string\|Regex)` | Registers a class to be a socket controller that can listen to websocket events and respond to them. |
| `@OnMessage(messageName: string)` | Registers controller's action to be executed when socket receives message with given name. |

@@ -433,2 +447,4 @@ | `@OnConnect()` | Registers controller's action to be executed when client connects to the socket. |

| `@SocketRooms()` | Injects rooms of the connected socket client. |
| `@NspParams()` | Injects dynamic namespace params. |
| `@NspParam(paramName: string)` | Injects param from the dynamic namespace. |
| `@Middleware()` | Registers a new middleware to be registered in the socket.io. |

@@ -435,0 +451,0 @@ | `@EmitOnSuccess(messageName: string)` | If this decorator is set then after controller action will emit message with the given name after action execution. It will emit message only if controller succeed without errors. If result is a Promise then it will wait until promise is resolved and emit a message. |

@@ -24,3 +24,3 @@ import { ClassTransformOptions } from "class-transformer";

constructor(io: any);
execute(): void;
execute(controllerClasses?: Function[], middlewareClasses?: Function[]): void;
/**

@@ -41,2 +41,3 @@ * Registers middlewares.

private handleFailResult;
private handleNamespaceParams;
}

@@ -8,2 +8,3 @@ "use strict";

var ParamTypes_1 = require("./metadata/types/ParamTypes");
var pathToRegexp = require("path-to-regexp");
/**

@@ -23,5 +24,5 @@ * Registers controllers and actions in the given server framework.

// -------------------------------------------------------------------------
SocketControllerExecutor.prototype.execute = function () {
this.registerControllers();
this.registerMiddlewares();
SocketControllerExecutor.prototype.execute = function (controllerClasses, middlewareClasses) {
this.registerControllers(controllerClasses);
this.registerMiddlewares(middlewareClasses);
};

@@ -58,3 +59,7 @@ // -------------------------------------------------------------------------

controllersWithNamespaces.forEach(function (controller) {
_this.io.of(controller.namespace).on("connection", function (socket) { return _this.handleConnection([controller], socket); });
var namespace = controller.namespace;
if (!(namespace instanceof RegExp)) {
namespace = pathToRegexp(namespace);
}
_this.io.of(namespace).on("connection", function (socket) { return _this.handleConnection([controller], socket); });
});

@@ -113,2 +118,9 @@ return this;

}
else if (param.type === ParamTypes_1.ParamTypes.NAMESPACE_PARAMS) {
return _this.handleNamespaceParams(options.socket, action, param);
}
else if (param.type === ParamTypes_1.ParamTypes.NAMESPACE_PARAM) {
var params = _this.handleNamespaceParams(options.socket, action, param);
return params[param.value];
}
else {

@@ -197,2 +209,13 @@ return _this.handleParam(param, options);

};
SocketControllerExecutor.prototype.handleNamespaceParams = function (socket, action, param) {
var _this = this;
var keys = [];
var regexp = pathToRegexp(action.controllerMetadata.namespace, keys);
var parts = regexp.exec(socket.nsp.name);
var params = [];
keys.forEach(function (key, index) {
params[key.name] = _this.handleParamFormat(parts[index + 1], param);
});
return params;
};
return SocketControllerExecutor;

@@ -199,0 +222,0 @@ }());

@@ -9,7 +9,7 @@ import { ClassTransformOptions } from "class-transformer";

*/
controllers?: string[];
controllers?: Function[] | string[];
/**
* List of directories from where to "require" all your middlewares.
*/
middlewares?: string[];
middlewares?: Function[] | string[];
/**

@@ -16,0 +16,0 @@ * Indicates if class-transformer package should be used to perform message body serialization / deserialization.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc