import { createRequire } from 'node:module'; import { stringifyIds } from '../database/objectid.js'; const require = createRequire(import.meta.url); const { Encoder, Decoder } = createRequire(require.resolve('socket.io'))( 'socket.io-parser' ); class StringIdEncoder extends Encoder { encode(packet) { if (packet?.data == null) return super.encode(packet); return super.encode({ ...packet, data: stringifyIds(packet.data) }); } } export const stringIdParser = { Encoder: StringIdEncoder, Decoder }; export function useStringIds(socket) { socket.use((packet, next) => { for (let index = 1; index < packet.length; index += 1) { if (typeof packet[index] !== 'function') { packet[index] = stringifyIds(packet[index]); } } next(); }); }