UNPKG

@orbit/jsonapi

Version:

JSON:API support for Orbit.

80 lines 13.1 kB
import { deepMerge } from '@orbit/utils'; import { NoopSerializer, BooleanSerializer, StringSerializer, DateSerializer, DateTimeSerializer, NumberSerializer, buildSerializerFor, buildSerializerClassFor, buildSerializerSettingsFor } from '@orbit/serializers'; import { JSONAPIAtomicOperationSerializer } from './jsonapi-atomic-operation-serializer'; import { JSONAPIResourceSerializer } from './jsonapi-resource-serializer'; import { JSONAPIResourceIdentitySerializer } from './jsonapi-resource-identity-serializer'; import { JSONAPISerializers } from './jsonapi-serializers'; import { JSONAPIDocumentSerializer } from './jsonapi-document-serializer'; import { JSONAPIResourceFieldSerializer } from './jsonapi-resource-field-serializer'; export function buildJSONAPISerializerFor(settings) { const { schema, keyMap } = settings; const defaultSerializerClassFor = buildSerializerClassFor({ unknown: NoopSerializer, object: NoopSerializer, array: NoopSerializer, boolean: BooleanSerializer, string: StringSerializer, date: DateSerializer, datetime: DateTimeSerializer, number: NumberSerializer, [JSONAPISerializers.Resource]: JSONAPIResourceSerializer, [JSONAPISerializers.ResourceDocument]: JSONAPIDocumentSerializer, [JSONAPISerializers.ResourceIdentity]: JSONAPIResourceIdentitySerializer, [JSONAPISerializers.ResourceAtomicOperation]: JSONAPIAtomicOperationSerializer, [JSONAPISerializers.ResourceType]: StringSerializer, [JSONAPISerializers.ResourceTypeParam]: StringSerializer, [JSONAPISerializers.ResourceTypePath]: StringSerializer, [JSONAPISerializers.ResourceField]: JSONAPIResourceFieldSerializer, [JSONAPISerializers.ResourceFieldParam]: JSONAPIResourceFieldSerializer, [JSONAPISerializers.ResourceFieldPath]: JSONAPIResourceFieldSerializer }); let serializerClassFor; if (settings.serializerClassFor) { serializerClassFor = (type = 'unknown') => { return (settings.serializerClassFor(type) || defaultSerializerClassFor(type)); }; } else { serializerClassFor = defaultSerializerClassFor; } let serializerSettingsFor; let defaultSerializerSettingsFor = buildSerializerSettingsFor({ sharedSettings: { keyMap, schema }, settingsByType: { [JSONAPISerializers.ResourceTypePath]: { serializationOptions: { inflectors: ['pluralize', 'dasherize'] } }, [JSONAPISerializers.ResourceFieldPath]: { serializationOptions: { inflectors: ['dasherize'] } } } }); let customSerializerSettingsFor = settings.serializerSettingsFor; if (customSerializerSettingsFor) { serializerSettingsFor = (type = 'unknown') => { let defaultSerializerSettings = defaultSerializerSettingsFor(type) || {}; let customSerializerSettings = customSerializerSettingsFor(type) || {}; return deepMerge(defaultSerializerSettings, customSerializerSettings); }; } else { serializerSettingsFor = defaultSerializerSettingsFor; } let customSerializerFor = settings.serializerFor; let backupSerializerFor = buildSerializerFor({ serializerClassFor, serializerSettingsFor }); if (customSerializerFor) { return (type = 'unknown') => customSerializerFor(type) || backupSerializerFor(type); } else { return (type = 'unknown') => backupSerializerFor(type); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1zZXJpYWxpemVyLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXplcnMvanNvbmFwaS1zZXJpYWxpemVyLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFLM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUzRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVyRixNQUFNLFVBQVUseUJBQXlCLENBQUMsUUFNekM7SUFDQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUVwQyxNQUFNLHlCQUF5QixHQUFHLHVCQUF1QixDQUFDO1FBQ3hELE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLEtBQUssRUFBRSxjQUFjO1FBQ3JCLE9BQU8sRUFBRSxpQkFBb0M7UUFDN0MsTUFBTSxFQUFFLGdCQUFtQztRQUMzQyxJQUFJLEVBQUUsY0FBaUM7UUFDdkMsUUFBUSxFQUFFLGtCQUFxQztRQUMvQyxNQUFNLEVBQUUsZ0JBQW1DO1FBQzNDLENBQUMsa0JBQWtCLENBQUMsUUFBa0IsQ0FBQyxFQUFFLHlCQUE0QztRQUNyRixDQUFDLGtCQUFrQixDQUFDLGdCQUEwQixDQUFDLEVBQUUseUJBQTRDO1FBQzdGLENBQUMsa0JBQWtCLENBQUMsZ0JBQTBCLENBQUMsRUFBRSxpQ0FBb0Q7UUFDckcsQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBaUMsQ0FBQyxFQUFFLGdDQUFtRDtRQUMzRyxDQUFDLGtCQUFrQixDQUFDLFlBQXNCLENBQUMsRUFBRSxnQkFBbUM7UUFDaEYsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBMkIsQ0FBQyxFQUFFLGdCQUFtQztRQUNyRixDQUFDLGtCQUFrQixDQUFDLGdCQUEwQixDQUFDLEVBQUUsZ0JBQW1DO1FBQ3BGLENBQUMsa0JBQWtCLENBQUMsYUFBdUIsQ0FBQyxFQUFFLDhCQUFpRDtRQUMvRixDQUFDLGtCQUFrQixDQUFDLGtCQUE0QixDQUFDLEVBQUUsOEJBQWlEO1FBQ3BHLENBQUMsa0JBQWtCLENBQUMsaUJBQTJCLENBQUMsRUFBRSw4QkFBaUQ7S0FDcEcsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxrQkFBd0MsQ0FBQztJQUM3QyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvQixrQkFBa0IsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLEVBQUUsRUFBRTtZQUN4QyxPQUFPLENBQ0osUUFBUSxDQUFDLGtCQUEyQyxDQUFDLElBQUksQ0FBQztnQkFDM0QseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQ2hDLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSDtTQUFNO1FBQ0wsa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7S0FDaEQ7SUFFRCxJQUFJLHFCQUE4QyxDQUFDO0lBQ25ELElBQUksNEJBQTRCLEdBQUcsMEJBQTBCLENBQUM7UUFDNUQsY0FBYyxFQUFFO1lBQ2QsTUFBTTtZQUNOLE1BQU07U0FDUDtRQUNELGNBQWMsRUFBRTtZQUNkLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDckMsb0JBQW9CLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUU7YUFDakU7WUFDRCxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3RDLG9CQUFvQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7YUFDcEQ7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILElBQUksMkJBQTJCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDO0lBQ2pFLElBQUksMkJBQTJCLEVBQUU7UUFDL0IscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxFQUFFLEVBQUU7WUFDM0MsSUFBSSx5QkFBeUIsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekUsSUFBSSx3QkFBd0IsR0FDekIsMkJBQXVELENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sU0FBUyxDQUFDLHlCQUF5QixFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDO0tBQ0g7U0FBTTtRQUNMLHFCQUFxQixHQUFHLDRCQUE0QixDQUFDO0tBQ3REO0lBRUQsSUFBSSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ2pELElBQUksbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDM0Msa0JBQWtCO1FBQ2xCLHFCQUFxQjtLQUN0QixDQUFDLENBQUM7SUFDSCxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FDekIsbUJBQXVDLENBQUMsSUFBSSxDQUFDO1lBQzlDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzdCO1NBQU07UUFDTCxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDeEQ7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSAnQG9yYml0L3V0aWxzJztcbmltcG9ydCB7XG4gIE5vb3BTZXJpYWxpemVyLFxuICBCb29sZWFuU2VyaWFsaXplcixcbiAgU3RyaW5nU2VyaWFsaXplcixcbiAgRGF0ZVNlcmlhbGl6ZXIsXG4gIERhdGVUaW1lU2VyaWFsaXplcixcbiAgTnVtYmVyU2VyaWFsaXplcixcbiAgYnVpbGRTZXJpYWxpemVyRm9yLFxuICBidWlsZFNlcmlhbGl6ZXJDbGFzc0ZvcixcbiAgYnVpbGRTZXJpYWxpemVyU2V0dGluZ3NGb3IsXG4gIFNlcmlhbGl6ZXJGb3JGbixcbiAgU2VyaWFsaXplckNsYXNzRm9yRm4sXG4gIFNlcmlhbGl6ZXJTZXR0aW5nc0ZvckZuLFxuICBTZXJpYWxpemVyQ2xhc3Ncbn0gZnJvbSAnQG9yYml0L3NlcmlhbGl6ZXJzJztcbmltcG9ydCB7IEpTT05BUElBdG9taWNPcGVyYXRpb25TZXJpYWxpemVyIH0gZnJvbSAnLi9qc29uYXBpLWF0b21pYy1vcGVyYXRpb24tc2VyaWFsaXplcic7XG5pbXBvcnQgeyBKU09OQVBJUmVzb3VyY2VTZXJpYWxpemVyIH0gZnJvbSAnLi9qc29uYXBpLXJlc291cmNlLXNlcmlhbGl6ZXInO1xuaW1wb3J0IHsgSlNPTkFQSVJlc291cmNlSWRlbnRpdHlTZXJpYWxpemVyIH0gZnJvbSAnLi9qc29uYXBpLXJlc291cmNlLWlkZW50aXR5LXNlcmlhbGl6ZXInO1xuaW1wb3J0IHsgUmVjb3JkU2NoZW1hLCBSZWNvcmRLZXlNYXAgfSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBKU09OQVBJU2VyaWFsaXplcnMgfSBmcm9tICcuL2pzb25hcGktc2VyaWFsaXplcnMnO1xuaW1wb3J0IHsgSlNPTkFQSURvY3VtZW50U2VyaWFsaXplciB9IGZyb20gJy4vanNvbmFwaS1kb2N1bWVudC1zZXJpYWxpemVyJztcbmltcG9ydCB7IEpTT05BUElSZXNvdXJjZUZpZWxkU2VyaWFsaXplciB9IGZyb20gJy4vanNvbmFwaS1yZXNvdXJjZS1maWVsZC1zZXJpYWxpemVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSlNPTkFQSVNlcmlhbGl6ZXJGb3Ioc2V0dGluZ3M6IHtcbiAgc2NoZW1hOiBSZWNvcmRTY2hlbWE7XG4gIGtleU1hcD86IFJlY29yZEtleU1hcDtcbiAgc2VyaWFsaXplckZvcj86IFNlcmlhbGl6ZXJGb3JGbjtcbiAgc2VyaWFsaXplckNsYXNzRm9yPzogU2VyaWFsaXplckNsYXNzRm9yRm47XG4gIHNlcmlhbGl6ZXJTZXR0aW5nc0Zvcj86IFNlcmlhbGl6ZXJTZXR0aW5nc0ZvckZuO1xufSk6IFNlcmlhbGl6ZXJGb3JGbiB7XG4gIGNvbnN0IHsgc2NoZW1hLCBrZXlNYXAgfSA9IHNldHRpbmdzO1xuXG4gIGNvbnN0IGRlZmF1bHRTZXJpYWxpemVyQ2xhc3NGb3IgPSBidWlsZFNlcmlhbGl6ZXJDbGFzc0Zvcih7XG4gICAgdW5rbm93bjogTm9vcFNlcmlhbGl6ZXIsXG4gICAgb2JqZWN0OiBOb29wU2VyaWFsaXplcixcbiAgICBhcnJheTogTm9vcFNlcmlhbGl6ZXIsXG4gICAgYm9vbGVhbjogQm9vbGVhblNlcmlhbGl6ZXIgYXMgU2VyaWFsaXplckNsYXNzLFxuICAgIHN0cmluZzogU3RyaW5nU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgZGF0ZTogRGF0ZVNlcmlhbGl6ZXIgYXMgU2VyaWFsaXplckNsYXNzLFxuICAgIGRhdGV0aW1lOiBEYXRlVGltZVNlcmlhbGl6ZXIgYXMgU2VyaWFsaXplckNsYXNzLFxuICAgIG51bWJlcjogTnVtYmVyU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZSBhcyBzdHJpbmddOiBKU09OQVBJUmVzb3VyY2VTZXJpYWxpemVyIGFzIFNlcmlhbGl6ZXJDbGFzcyxcbiAgICBbSlNPTkFQSVNlcmlhbGl6ZXJzLlJlc291cmNlRG9jdW1lbnQgYXMgc3RyaW5nXTogSlNPTkFQSURvY3VtZW50U2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZUlkZW50aXR5IGFzIHN0cmluZ106IEpTT05BUElSZXNvdXJjZUlkZW50aXR5U2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZUF0b21pY09wZXJhdGlvbiBhcyBzdHJpbmddOiBKU09OQVBJQXRvbWljT3BlcmF0aW9uU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZVR5cGUgYXMgc3RyaW5nXTogU3RyaW5nU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZVR5cGVQYXJhbSBhcyBzdHJpbmddOiBTdHJpbmdTZXJpYWxpemVyIGFzIFNlcmlhbGl6ZXJDbGFzcyxcbiAgICBbSlNPTkFQSVNlcmlhbGl6ZXJzLlJlc291cmNlVHlwZVBhdGggYXMgc3RyaW5nXTogU3RyaW5nU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZUZpZWxkIGFzIHN0cmluZ106IEpTT05BUElSZXNvdXJjZUZpZWxkU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3MsXG4gICAgW0pTT05BUElTZXJpYWxpemVycy5SZXNvdXJjZUZpZWxkUGFyYW0gYXMgc3RyaW5nXTogSlNPTkFQSVJlc291cmNlRmllbGRTZXJpYWxpemVyIGFzIFNlcmlhbGl6ZXJDbGFzcyxcbiAgICBbSlNPTkFQSVNlcmlhbGl6ZXJzLlJlc291cmNlRmllbGRQYXRoIGFzIHN0cmluZ106IEpTT05BUElSZXNvdXJjZUZpZWxkU2VyaWFsaXplciBhcyBTZXJpYWxpemVyQ2xhc3NcbiAgfSk7XG4gIGxldCBzZXJpYWxpemVyQ2xhc3NGb3I6IFNlcmlhbGl6ZXJDbGFzc0ZvckZuO1xuICBpZiAoc2V0dGluZ3Muc2VyaWFsaXplckNsYXNzRm9yKSB7XG4gICAgc2VyaWFsaXplckNsYXNzRm9yID0gKHR5cGUgPSAndW5rbm93bicpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChzZXR0aW5ncy5zZXJpYWxpemVyQ2xhc3NGb3IgYXMgU2VyaWFsaXplckNsYXNzRm9yRm4pKHR5cGUpIHx8XG4gICAgICAgIGRlZmF1bHRTZXJpYWxpemVyQ2xhc3NGb3IodHlwZSlcbiAgICAgICk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVyQ2xhc3NGb3IgPSBkZWZhdWx0U2VyaWFsaXplckNsYXNzRm9yO1xuICB9XG5cbiAgbGV0IHNlcmlhbGl6ZXJTZXR0aW5nc0ZvcjogU2VyaWFsaXplclNldHRpbmdzRm9yRm47XG4gIGxldCBkZWZhdWx0U2VyaWFsaXplclNldHRpbmdzRm9yID0gYnVpbGRTZXJpYWxpemVyU2V0dGluZ3NGb3Ioe1xuICAgIHNoYXJlZFNldHRpbmdzOiB7XG4gICAgICBrZXlNYXAsXG4gICAgICBzY2hlbWFcbiAgICB9LFxuICAgIHNldHRpbmdzQnlUeXBlOiB7XG4gICAgICBbSlNPTkFQSVNlcmlhbGl6ZXJzLlJlc291cmNlVHlwZVBhdGhdOiB7XG4gICAgICAgIHNlcmlhbGl6YXRpb25PcHRpb25zOiB7IGluZmxlY3RvcnM6IFsncGx1cmFsaXplJywgJ2Rhc2hlcml6ZSddIH1cbiAgICAgIH0sXG4gICAgICBbSlNPTkFQSVNlcmlhbGl6ZXJzLlJlc291cmNlRmllbGRQYXRoXToge1xuICAgICAgICBzZXJpYWxpemF0aW9uT3B0aW9uczogeyBpbmZsZWN0b3JzOiBbJ2Rhc2hlcml6ZSddIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBsZXQgY3VzdG9tU2VyaWFsaXplclNldHRpbmdzRm9yID0gc2V0dGluZ3Muc2VyaWFsaXplclNldHRpbmdzRm9yO1xuICBpZiAoY3VzdG9tU2VyaWFsaXplclNldHRpbmdzRm9yKSB7XG4gICAgc2VyaWFsaXplclNldHRpbmdzRm9yID0gKHR5cGUgPSAndW5rbm93bicpID0+IHtcbiAgICAgIGxldCBkZWZhdWx0U2VyaWFsaXplclNldHRpbmdzID0gZGVmYXVsdFNlcmlhbGl6ZXJTZXR0aW5nc0Zvcih0eXBlKSB8fCB7fTtcbiAgICAgIGxldCBjdXN0b21TZXJpYWxpemVyU2V0dGluZ3MgPVxuICAgICAgICAoY3VzdG9tU2VyaWFsaXplclNldHRpbmdzRm9yIGFzIFNlcmlhbGl6ZXJTZXR0aW5nc0ZvckZuKSh0eXBlKSB8fCB7fTtcbiAgICAgIHJldHVybiBkZWVwTWVyZ2UoZGVmYXVsdFNlcmlhbGl6ZXJTZXR0aW5ncywgY3VzdG9tU2VyaWFsaXplclNldHRpbmdzKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZXJTZXR0aW5nc0ZvciA9IGRlZmF1bHRTZXJpYWxpemVyU2V0dGluZ3NGb3I7XG4gIH1cblxuICBsZXQgY3VzdG9tU2VyaWFsaXplckZvciA9IHNldHRpbmdzLnNlcmlhbGl6ZXJGb3I7XG4gIGxldCBiYWNrdXBTZXJpYWxpemVyRm9yID0gYnVpbGRTZXJpYWxpemVyRm9yKHtcbiAgICBzZXJpYWxpemVyQ2xhc3NGb3IsXG4gICAgc2VyaWFsaXplclNldHRpbmdzRm9yXG4gIH0pO1xuICBpZiAoY3VzdG9tU2VyaWFsaXplckZvcikge1xuICAgIHJldHVybiAodHlwZSA9ICd1bmtub3duJykgPT5cbiAgICAgIChjdXN0b21TZXJpYWxpemVyRm9yIGFzIFNlcmlhbGl6ZXJGb3JGbikodHlwZSkgfHxcbiAgICAgIGJhY2t1cFNlcmlhbGl6ZXJGb3IodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh0eXBlID0gJ3Vua25vd24nKSA9PiBiYWNrdXBTZXJpYWxpemVyRm9yKHR5cGUpO1xuICB9XG59XG4iXX0=