From f5e79c0feb15aec56b5cb69803802b635316d03d Mon Sep 17 00:00:00 2001 From: Attila Orosz Date: Tue, 17 Sep 2024 21:07:56 +0200 Subject: [PATCH] feat: update path-to-regexp (#993) --- package-lock.json | 25 +++++++++++++++---------- package.json | 2 +- src/SocketControllers.ts | 18 ++++++++++++++---- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 129bd212..9e8fb163 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "class-transformer": "^0.5.1", "glob": "^11.0.0", - "path-to-regexp": "^6.2.2", + "path-to-regexp": "^8.1.0", "reflect-metadata": "^0.2.2", "socket.io": "^4.7.5" }, @@ -3271,8 +3271,9 @@ "node_modules/express/node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -5713,9 +5714,13 @@ } }, "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", + "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -9704,7 +9709,7 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true } } @@ -11470,9 +11475,9 @@ } }, "path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", + "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==" }, "path-type": { "version": "4.0.0", diff --git a/package.json b/package.json index 8d975a93..8c887570 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dependencies": { "class-transformer": "^0.5.1", "glob": "^11.0.0", - "path-to-regexp": "^6.2.2", + "path-to-regexp": "^8.1.0", "reflect-metadata": "^0.2.2", "socket.io": "^4.7.5" }, diff --git a/src/SocketControllers.ts b/src/SocketControllers.ts index 933df0c5..1832ce85 100644 --- a/src/SocketControllers.ts +++ b/src/SocketControllers.ts @@ -109,7 +109,7 @@ export class SocketControllers { return true; } - const nspRegexp = nsp instanceof RegExp ? nsp : pathToRegexp(nsp); + const nspRegexp = nsp instanceof RegExp ? nsp : pathToRegexp(nsp).regexp; return nspRegexp.test(namespace.name); }); @@ -145,7 +145,7 @@ export class SocketControllers { for (const [nsp, controllers] of Object.entries(controllerNamespaceMap)) { const namespace = controllerNamespaceRegExpMap[nsp]; this.io - .of(namespace instanceof RegExp ? namespace : pathToRegexp(namespace)) + .of(namespace instanceof RegExp ? namespace : pathToRegexp(namespace).regexp) .on('connection', (socket: Socket) => { for (const controller of controllers) { this.registerController(socket, controller); @@ -403,8 +403,18 @@ export class SocketControllers { namespace: string | RegExp | undefined, parameterMetadata?: ParameterMetadata ) { - const keys: any[] = []; - const regexp = namespace instanceof RegExp ? namespace : pathToRegexp(namespace || '/', keys); + let keys: any[]; + let regexp: RegExp; + + if (namespace instanceof RegExp) { + regexp = namespace; + keys = []; + } else { + const pathToRegexpResult = pathToRegexp(namespace || '/'); + regexp = pathToRegexpResult.regexp; + keys = pathToRegexpResult.keys; + } + const parts: any[] = regexp.exec(socket.nsp.name) || []; const params: Record = {}; keys.forEach((key: any, index: number) => {