Skip to content

Commit

Permalink
fix(socketio): add support for ack callbacks
Browse files Browse the repository at this point in the history
closes #2679
  • Loading branch information
derevnjuk committed Apr 25, 2024
1 parent 64181a1 commit d7880a9
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -772,7 +772,7 @@ describe("SocketHandlersBuilder", () => {
});
});
describe("deserialize()", () => {
it("should call ConverterService.deserialize", () => {
it("should call deserialize on args", () => {
const provider: any = {
store: {
get: jest.fn()
Expand Down Expand Up @@ -800,5 +800,34 @@ describe("SocketHandlersBuilder", () => {
args: [["any"]]
});
});

it("should map ack callback without deserialization", () => {
const provider: any = {
store: {
get: jest.fn()
}
};
const parameters: any[] = [
{
filter: SocketFilters.ARGS,
useMapper: true,
mapIndex: 0,
type: Function
}
];
const ack = () => {};
const scope: any = {
args: [ack]
};

const builder = new SocketHandlersBuilder(provider, PlatformTest.injector);

// @ts-ignore
builder.deserialize({parameters} as any, scope as any);

expect(scope).toEqual({
args: [ack]
});
});
});
});
19 changes: 12 additions & 7 deletions packages/third-parties/socketio/src/class/SocketHandlersBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ import {SocketSessionData} from "./SocketSessionData";
export class SocketHandlersBuilder {
private readonly socketProviderMetadata: SocketProviderMetadata;

constructor(private provider: Provider, private injector: InjectorService) {
constructor(
private provider: Provider,
private injector: InjectorService
) {
this.socketProviderMetadata = new SocketProviderMetadata(this.provider.store.get("socketIO"));
}

Expand Down Expand Up @@ -161,12 +164,14 @@ export class SocketHandlersBuilder {
const {filter, useMapper, mapIndex, type, collectionType} = parameters![index];
let value = scope.args[mapIndex!];

if (filter === SocketFilters.ARGS && useMapper) {
value = deserialize(value, {
type,
collectionType,
useAlias: true
});
if (filter === SocketFilters.ARGS) {
if (useMapper && typeof value !== "function") {
value = deserialize(value, {
type,
collectionType,
useAlias: true
});
}
scope.args[mapIndex!] = value;
}
});
Expand Down

0 comments on commit d7880a9

Please sign in to comment.