/
githubmirror
/
immutable-js
Обзор
Документация
Войти
/
githubmirror
/
immutable-js
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/toJS.ts
44 строки
1 KB
Julien Deniau
fix Prototype Pollution in mergeDeep, toJS, etc.
03 мар 2026, 10:53
03 мар 2026, 10:53
6734b7b
Код
Авторство
О чём код?
import type { Collection } from './Collection'; import type { Record } from './Record'; import { Seq } from './Seq'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import isDataStructure from './utils/isDataStructure'; import { isProtoKey } from './utils/protoInjection'; export function toJS( value: Collection | Record ): Array<unknown> | { [key: string]: unknown }; export function toJS(value: unknown): unknown; export function toJS( value: unknown ): Array<unknown> | { [key: string]: unknown } | unknown { if (!value || typeof value !== 'object') { return value; } if (!isCollection(value)) { if (!isDataStructure(value)) { return value; } // @ts-expect-error until Seq has been migrated to TypeScript value = Seq(value); } if (isKeyed(value)) { const result: { [key: string]: unknown } = {}; // @ts-expect-error `__iterate` exists on all Keyed collections but method is not defined in the type value.__iterate((v, k) => { if (isProtoKey(k)) { return; } result[k] = toJS(v); }); return result; } const result: Array<unknown> = []; // @ts-expect-error value "should" be a non-keyed collection, but we may need to assert for stricter types value.__iterate((v: unknown) => { result.push(toJS(v)); }); return result; }