UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

49 lines 1.84 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveTokensTopologically = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var isPlainObject = value => { return typeof value === 'object' && value !== null && value.constructor === Object; }; var resolveTokensTopologically = dictionary => { var resolvedMemo = new Map(); var visiting = new Set(); var resolveValueDeep = value => { if (typeof value === 'string' && value.startsWith('$')) { return dfs(value.slice(1), value); } if (Array.isArray(value)) return value.map(resolveValueDeep); if (isPlainObject(value)) { var out = {}; for (var _ref of Object.entries(value)) { var _ref2 = (0, _slicedToArray2.default)(_ref, 2); var k = _ref2[0]; var v = _ref2[1]; out[k] = resolveValueDeep(v); } return out; } return value; }; var dfs = (tokenKeyOrPath, originalRef) => { var cacheKey = tokenKeyOrPath; if (resolvedMemo.has(cacheKey)) return resolvedMemo.get(cacheKey); if (visiting.has(cacheKey)) { throw new Error(`Cycle detected while topo-evaluating "${originalRef}" (at "${cacheKey}")`); } visiting.add(cacheKey); var raw = dictionary[tokenKeyOrPath]; if (raw === undefined) { throw new Error(`Unresolved reference: "${originalRef}" (missing "${tokenKeyOrPath}")`); } var fullyResolved = resolveValueDeep(raw); resolvedMemo.set(cacheKey, fullyResolved); visiting.delete(cacheKey); return fullyResolved; }; return resolveValueDeep(dictionary); }; exports.resolveTokensTopologically = resolveTokensTopologically; //# sourceMappingURL=topologicalResolution.js.map