UNPKG

@valueflows/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

96 lines 17.6 kB
/** * Resolvers for EconomicResource fields * * @package: HoloREA * @since: 2019-10-31 */ import { DEFAULT_VF_MODULES, VfModule } from '../types.js'; import { mapZomeFn } from '../connection.js'; import agentQueries from '../queries/agent.js'; export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => { const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History); const hasMeasurement = -1 !== enabledVFModules.indexOf(VfModule.Measurement); const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification); const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification); const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action); const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent); const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment); const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent); const readRevision = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_resource', 'get_revision'); const readResources = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_resource_index', 'query_economic_resources'); const readUnit = mapZomeFn(dnaConfig, conductorUri, 'specification', 'unit', 'get_unit'); const readProcessSpecification = mapZomeFn(dnaConfig, conductorUri, 'specification', 'process_specification', 'get_process_specification'); const readAction = mapZomeFn(dnaConfig, conductorUri, 'specification', 'action', 'get_action'); const readResourceSpecification = mapZomeFn(dnaConfig, conductorUri, 'specification', 'resource_specification', 'get_resource_specification'); const readAgent = agentQueries(dnaConfig, conductorUri)['agent']; return Object.assign({ containedIn: async (record) => { const resources = await readResources({ params: { contains: record.id } }); if (!resources.edges || !resources.edges.length) { return null; } return resources.edges.pop()['node']; }, contains: async (record) => { const resources = await readResources({ params: { containedIn: record.id } }); if (!resources.edges || !resources.edges.length) { return []; } return resources.edges.map(({ node }) => node); }, economicEventsInOutFrom: () => { throw new Error('resolver unimplemented'); }, economicEventsTo: () => { throw new Error('resolver unimplemented'); }, previous: () => { throw new Error('resolver unimplemented'); }, next: () => { throw new Error('resolver unimplemented'); }, track: () => { throw new Error('resolver unimplemented'); }, trace: () => { throw new Error('resolver unimplemented'); }, }, (hasCommitment ? { commitments: () => { throw new Error('resolver unimplemented'); }, } : {}), (hasIntent ? { intents: () => { throw new Error('resolver unimplemented'); }, } : {}), (hasResourceSpecification ? { conformsTo: async (record) => { return (await readResourceSpecification({ address: record.conformsTo })).resourceSpecification; }, } : {}), (hasProcessSpecification ? { stage: async (record) => { return (await readProcessSpecification({ address: record.stage })).processSpecification; }, } : {}), (hasAction ? { state: async (record) => { return (await readAction({ id: record.state })); }, } : {}), (hasMeasurement ? { unitOfEffort: async (record) => { if (!record.unitOfEffort) { return null; } return (await readUnit({ id: record.unitOfEffort })).unit; }, } : {}), (hasAgent ? { primaryAccountable: async (record) => { return readAgent(record, { id: record.primaryAccountable }); }, } : {}), (hasHistory ? { revision: async (record, args) => { return (await readRevision(args)).economicResource; }, } : {})); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvbm9taWNSZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9lY29ub21pY1Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQWdJLE1BQU0sYUFBYSxDQUFBO0FBQ3ZNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQWtCNUMsT0FBTyxZQUFZLE1BQU0scUJBQXFCLENBQUE7QUFFOUMsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDaEcsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDOUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FB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RSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ2pELENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDUCxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUErQyxFQUF3QixFQUFFO1lBQzVGLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUN4QixPQUFPLElBQUksQ0FBQTthQUNaO1lBQ0QsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQzNELENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDUCxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDVixrQkFBa0IsRUFBRSxLQUFLLEVBQUUsTUFBNEMsRUFBa0IsRUFBRTtZQUN6RixPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQTtRQUM3RCxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ1AsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ1osUUFBUSxFQUFFLEtBQUssRUFBRSxNQUF3QixFQUFFLElBQTJDLEVBQTZCLEVBQUU7WUFDbkgsT0FBTyxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7UUFDcEQsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNSLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmVycyBmb3IgRWNvbm9taWNSZXNvdXJjZSBmaWVsZHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMTAtMzFcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBCeUlkLCBCeVJldmlzaW9uLCBSZWFkUGFyYW1zLCBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzLCBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MsIEFkZHJlc3NhYmxlSWRlbnRpZmllciwgQWdlbnRBZGRyZXNzIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBtYXBab21lRm4gfSBmcm9tICcuLi9jb25uZWN0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBFY29ub21pY1Jlc291cmNlLFxuICBSZXNvdXJjZVNwZWNpZmljYXRpb24sXG4gIFVuaXQsXG4gIFByb2Nlc3NTcGVjaWZpY2F0aW9uLFxuICBBY3Rpb24sXG4gIE1heWJlLFxuICBFY29ub21pY1Jlc291cmNlUmVzcG9uc2UsXG4gIEVjb25vbWljUmVzb3VyY2VDb25uZWN0aW9uLFxuICBVbml0UmVzcG9uc2UsXG4gIFByb2Nlc3NTcGVjaWZpY2F0aW9uUmVzcG9uc2UsXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvblJlc3BvbnNlLFxuICBBZ2VudCxcbn0gZnJvbSAnQHZhbHVlZmxvd3MvdmYtZ3JhcGhxbCdcbmltcG9ydCB7IEVjb25vbWljUmVzb3VyY2VTZWFyY2hJbnB1dCB9IGZyb20gJy4vem9tZVNlYXJjaElucHV0VHlwZXMuanMnXG5pbXBvcnQgeyBBZ2VudFJlc3BvbnNlIH0gZnJvbSAnLi4vbXV0YXRpb25zL2FnZW50J1xuaW1wb3J0IGFnZW50UXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL2FnZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCAoZW5hYmxlZFZGTW9kdWxlczogVmZNb2R1bGVbXSA9IERFRkFVTFRfVkZfTU9EVUxFUywgZG5hQ29uZmlnOiBETkFJZE1hcHBpbmdzLCBjb25kdWN0b3JVcmk6IHN0cmluZykgPT4ge1xuICBjb25zdCBoYXNIaXN0b3J5ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5IaXN0b3J5KVxuICBjb25zdCBoYXNNZWFzdXJlbWVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuTWVhc3VyZW1lbnQpXG4gIGNvbnN0IGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUmVzb3VyY2VTcGVjaWZpY2F0aW9uKVxuICBjb25zdCBoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUHJvY2Vzc1NwZWNpZmljYXRpb24pXG4gIGNvbnN0IGhhc0FjdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWN0aW9uKVxuICBjb25zdCBoYXNBZ2VudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWdlbnQpXG4gIGNvbnN0IGhhc0NvbW1pdG1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkNvbW1pdG1lbnQpXG4gIGNvbnN0IGhhc0ludGVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSW50ZW50KVxuXG4gIGNvbnN0IHJlYWRSZXZpc2lvbiA9IG1hcFpvbWVGbjxCeVJldmlzaW9uLCBFY29ub21pY1Jlc291cmNlUmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnb2JzZXJ2YXRpb24nLCAnZWNvbm9taWNfcmVzb3VyY2UnLCAnZ2V0X3JldmlzaW9uJylcbiAgY29uc3QgcmVhZFJlc291cmNlcyA9IG1hcFpvbWVGbjxFY29ub21pY1Jlc291cmNlU2VhcmNoSW5wdXQsIEVjb25vbWljUmVzb3VyY2VDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ29ic2VydmF0aW9uJywgJ2Vjb25vbWljX3Jlc291cmNlX2luZGV4JywgJ3F1ZXJ5X2Vjb25vbWljX3Jlc291cmNlcycpXG4gIGNvbnN0IHJlYWRVbml0ID0gbWFwWm9tZUZuPEJ5SWQsIFVuaXRSZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdzcGVjaWZpY2F0aW9uJywgJ3VuaXQnLCAnZ2V0X3VuaXQnKVxuICBjb25zdCByZWFkUHJvY2Vzc1NwZWNpZmljYXRpb24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdzcGVjaWZpY2F0aW9uJywgJ3Byb2Nlc3Nfc3BlY2lmaWNhdGlvbicsICdnZXRfcHJvY2Vzc19zcGVjaWZpY2F0aW9uJylcbiAgY29uc3QgcmVhZEFjdGlvbiA9IG1hcFpvbWVGbjxCeUlkLCBBY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnc3BlY2lmaWNhdGlvbicsICdhY3Rpb24nLCAnZ2V0X2FjdGlvbicpXG4gIGNvbnN0IHJlYWRSZXNvdXJjZVNwZWNpZmljYXRpb24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUmVzb3VyY2VTcGVjaWZpY2F0aW9uUmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnc3BlY2lmaWNhdGlvbicsICdyZXNvdXJjZV9zcGVjaWZpY2F0aW9uJywgJ2dldF9yZXNvdXJjZV9zcGVjaWZpY2F0aW9uJylcbiAgY29uc3QgcmVhZEFnZW50ID0gYWdlbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdlbnQnXVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIGNvbnRhaW5lZEluOiBhc3luYyAocmVjb3JkOiBFY29ub21pY1Jlc291cmNlKTogUHJvbWlzZTxNYXliZTxFY29ub21pY1Jlc291cmNlPj4gPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCByZWFkUmVzb3VyY2VzKHsgcGFyYW1zOiB7IGNvbnRhaW5zOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICBpZiAoIXJlc291cmNlcy5lZGdlcyB8fCAhcmVzb3VyY2VzLmVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlcy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgfSxcblxuICAgICAgY29udGFpbnM6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljUmVzb3VyY2UpOiBQcm9taXNlPEVjb25vbWljUmVzb3VyY2VbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCByZWFkUmVzb3VyY2VzKHsgcGFyYW1zOiB7IGNvbnRhaW5lZEluOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICBpZiAoIXJlc291cmNlcy5lZGdlcyB8fCAhcmVzb3VyY2VzLmVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZXMuZWRnZXMubWFwKCh7IG5vZGUgfSkgPT4gbm9kZSlcbiAgICAgIH0sXG4gICAgICBlY29ub21pY0V2ZW50c0luT3V0RnJvbTogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIGVjb25vbWljRXZlbnRzVG86ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB0cmFjazogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHRyYWNlOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0sXG4gICAgKGhhc0NvbW1pdG1lbnQgPyB7XG4gICAgICBjb21taXRtZW50czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNJbnRlbnQgPyB7XG4gICAgICBpbnRlbnRzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIGNvbmZvcm1zVG86IGFzeW5jIChyZWNvcmQ6IHsgY29uZm9ybXNUbzogUmVzb3VyY2VTcGVjaWZpY2F0aW9uQWRkcmVzcyB9KTogUHJvbWlzZTxSZXNvdXJjZVNwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uKHsgYWRkcmVzczogcmVjb3JkLmNvbmZvcm1zVG8gfSkpLnJlc291cmNlU3BlY2lmaWNhdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIHN0YWdlOiBhc3luYyAocmVjb3JkOiB7IHN0YWdlOiBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UHJvY2Vzc1NwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUHJvY2Vzc1NwZWNpZmljYXRpb24oeyBhZGRyZXNzOiByZWNvcmQuc3RhZ2UgfSkpLnByb2Nlc3NTcGVjaWZpY2F0aW9uXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FjdGlvbiA/IHtcbiAgICAgIHN0YXRlOiBhc3luYyAocmVjb3JkOiB7IHN0YXRlOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8QWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZEFjdGlvbih7IGlkOiByZWNvcmQuc3RhdGUgfSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc01lYXN1cmVtZW50ID8ge1xuICAgICAgdW5pdE9mRWZmb3J0OiBhc3luYyAocmVjb3JkOiB7IHVuaXRPZkVmZm9ydDogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPE1heWJlPFVuaXQ+PiA9PiB7XG4gICAgICAgIGlmICghcmVjb3JkLnVuaXRPZkVmZm9ydCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkVW5pdCh7IGlkOiByZWNvcmQudW5pdE9mRWZmb3J0IH0pKS51bml0XG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FnZW50ID8ge1xuICAgICAgcHJpbWFyeUFjY291bnRhYmxlOiBhc3luYyAocmVjb3JkOiB7IHByaW1hcnlBY2NvdW50YWJsZTogQWdlbnRBZGRyZXNzIH0pOiBQcm9taXNlPEFnZW50PiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkQWdlbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucHJpbWFyeUFjY291bnRhYmxlIH0pXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0hpc3RvcnkgPyB7XG4gICAgICByZXZpc2lvbjogYXN5bmMgKHJlY29yZDogRWNvbm9taWNSZXNvdXJjZSwgYXJnczogeyByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8RWNvbm9taWNSZXNvdXJjZT4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRSZXZpc2lvbihhcmdzKSkuZWNvbm9taWNSZXNvdXJjZVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICApXG59XG4iXX0=