/
githubmirror
/
nest
Обзор
Документация
Войти
/
githubmirror
/
nest
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
packages/microservices/utils/transform-pattern.utils.ts
68 строк
2 KB
Kamil Myśliwiec
fix(microservices): escape msvc pattern keys
03 апр 2026, 12:02
Не верифицирован
03 апр 2026, 12:02
848a6fb
Код
Авторство
О чём код?
import { isNumber, isObject, isString, } from '@nestjs/common/utils/shared.utils'; import { MsPattern } from '../interfaces'; const DEFAULT_MAX_DEPTH = 5; const DEFAULT_MAX_KEYS = 20; const escape = (s: string) => s.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); /** * Transforms the Pattern to Route safely. * * @param pattern - client pattern * @param depth - current recursion depth * @param maxDepth - maximum allowed recursion depth * @param maxKeys - maximum allowed keys per object * @returns string */ export function transformPatternToRoute( pattern: MsPattern, depth = 0, maxDepth = DEFAULT_MAX_DEPTH, maxKeys = DEFAULT_MAX_KEYS, ): string { if (isString(pattern) || isNumber(pattern)) { return `${pattern}`; } if (!isObject(pattern)) { // For non-string, non-number, non-object values return pattern; } if (depth > maxDepth) { return '[MAX_DEPTH_REACHED]'; } const keys = Object.keys(pattern); if (keys.length > maxKeys) { return '[TOO_MANY_KEYS]'; } const sortedKeys = keys.sort((a, b) => ('' + a).localeCompare(b)); const parts = sortedKeys.map(key => { const value = pattern[key]; let partialRoute = `"${escape(key)}":`; // Only quote strings, numbers and objects are handled recursively if (isString(value)) { partialRoute += `"${escape(transformPatternToRoute(value, depth + 1, maxDepth, maxKeys))}"`; } else { partialRoute += transformPatternToRoute( value, depth + 1, maxDepth, maxKeys, ); } return partialRoute; }); return `{${parts.join(',')}}`; }