diff --git a/package-lock.json b/package-lock.json index 28800ade..b859ff58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,6 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, - "@types/lodash": { - "version": "4.14.149", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", - "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", - "dev": true - }, "@types/node": { "version": "13.9.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", diff --git a/package.json b/package.json index 335d2528..e1c128f9 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,11 @@ "express": "^4.17.1", "inquirer": "^7.1.0", "ioredis": "^4.16.0", - "lodash": "^4.17.15", "request": "^2.88.2", "socket.io": "^2.3.0", "yargs": "^15.3.1" }, "devDependencies": { - "@types/lodash": "^4.14.149", "@types/node": "^13.9.1", "typescript": "^3.8.3" }, diff --git a/src/api/http-api.ts b/src/api/http-api.ts index 58477394..3651270d 100644 --- a/src/api/http-api.ts +++ b/src/api/http-api.ts @@ -1,6 +1,5 @@ import { Log } from './../log'; let url = require('url'); -import * as _ from 'lodash'; export class HttpApi { /** @@ -129,8 +128,10 @@ export class HttpApi { }; if (this.channel.isPresence(channelName)) { - this.channel.presence.getMembers(channelName).then(members => { - result['user_count'] = _.uniqBy(members, 'user_id').length; + this.channel.presence.getMembers(channelName).then((members: any[]) => { + result['user_count'] = members.reduce( + (map, member) => map.set(member.user_id, member), new Map() + ).size; res.json(result); }); @@ -158,11 +159,12 @@ export class HttpApi { } this.channel.presence.getMembers(channelName).then(members => { - let users = []; - - _.uniqBy(members, 'user_id').forEach((member: any) => { - users.push({ id: member.user_id, user_info: member.user_info }); - }); + let users = [ + ...members.reduce((map, member) => map.set(member.user_id, { + id: member.user_id, + user_info: member.user_info + }), new Map()) + ] res.json({ users: users }); }, error => Log.error(error)); diff --git a/src/channels/presence-channel.ts b/src/channels/presence-channel.ts index 7b618720..5454967f 100644 --- a/src/channels/presence-channel.ts +++ b/src/channels/presence-channel.ts @@ -1,6 +1,5 @@ import { Database } from './../database'; import { Log } from './../log'; -var _ = require("lodash"); export class PresenceChannel { /** @@ -94,7 +93,11 @@ export class PresenceChannel { this.db.set(channel + ":members", members); - members = _.uniqBy(members.reverse(), "user_id"); + members = [ + ...members.reduce( + (map, member) => map.set(member.user_id, member), new Map() + ).values() + ] this.onSubscribed(socket, channel, members);