import plistModule from '@expo/plist' function isRecord(value: unknown): value is Record { return typeof value === 'object' && value !== null && !Array.isArray(value) } function resolvePlistParser(value: unknown): ((source: string) => unknown) | null { if (!isRecord(value)) return null const direct = value.parse if (typeof direct === 'function') { return (source) => Reflect.apply(direct, value, [source]) } const nested = value.default if (!isRecord(nested)) return null const nestedParse = nested.parse return typeof nestedParse === 'function' ? (source) => Reflect.apply(nestedParse, nested, [source]) : null } // bun consumes @expo/plist's default export directly, while the compiled commonjs // scanner receives the package namespace with that export nested under default. const parsePlist = resolvePlistParser(plistModule) export function parsePlistSource(source: string): unknown { return parsePlist?.(source) ?? null }