UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

63 lines (46 loc) 1.49 kB
import { ContextKeysManager } from "./index"; import * as R from "ramda"; interface IResolver { resolve: (string) => Promise<string | number | object>; } export class EntryResolver implements IResolver { entry: ZappEntry; constructor(entry: ZappEntry) { this.entry = entry; } async resolve(key: string) { if (!key || key.length === 0) { return this.entry; } return R.view(R.lensPath(key.split(".")), this.entry); } } export class ContextResolver implements IResolver { resolve = async (compositeKey: string) => ContextKeysManager.instance.getKey(compositeKey); } export const resolveObjectValues = async ( data: Record<string, any>, resolvers: Record<string, IResolver> = null ) => { const entries = Object.entries(data); const exResolvers = { ctx: new ContextResolver(), ...resolvers }; const resolvedEntries = await Promise.all( entries.map(async ([key, value]) => { const regex = /@{([^/]+)\/([^}]*)}/; if (typeof value !== "string") { return [key, value]; } const match = (value as string).match(regex); if (match) { const contextResolverName = match[1]; const compositeKey = match[2]; const resolver = exResolvers[contextResolverName] || exResolvers.ctx; const resolvedValue = await resolver.resolve(compositeKey); return [key, resolvedValue]; } return [key, value]; }) ); return Object.fromEntries(resolvedEntries); };