UNPKG

@valueflows/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

107 lines 20.7 kB
/** * Resolvers for EconomicEvent fields * * @package: HoloREA * @since: 2019-08-27 */ import { DEFAULT_VF_MODULES, VfModule } from '../types.js'; import { extractEdges, mapZomeFn } from '../connection.js'; import agentQueries from '../queries/agent.js'; import agreementQueries from '../queries/agreement.js'; import resourceQueries from '../queries/economicResource.js'; export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => { const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History); const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent); const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification); const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action); const hasFulfillment = -1 !== enabledVFModules.indexOf(VfModule.Fulfillment); const hasSatisfaction = -1 !== enabledVFModules.indexOf(VfModule.Satisfaction); const hasAgreement = -1 !== enabledVFModules.indexOf(VfModule.Agreement); const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process); const readRevision = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_event', 'get_revision'); const readFulfillments = mapZomeFn(dnaConfig, conductorUri, 'observation', 'fulfillment_index', 'query_fulfillments'); const readSatisfactions = mapZomeFn(dnaConfig, conductorUri, 'observation', 'satisfaction_index', 'query_satisfactions'); const readProcesses = mapZomeFn(dnaConfig, conductorUri, 'observation', 'process_index', 'query_processes'); 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']; const readAgreement = agreementQueries(dnaConfig, conductorUri)['agreement']; const readResource = resourceQueries(dnaConfig, conductorUri)['economicResource']; return Object.assign({ resourceInventoriedAs: async (record) => { if (!record.resourceInventoriedAs) return null; return await readResource(record, { id: record.resourceInventoriedAs }); }, toResourceInventoriedAs: async (record) => { if (!record.toResourceInventoriedAs) return null; return await readResource(record, { id: record.toResourceInventoriedAs }); }, triggeredBy: () => { throw new Error('resolver unimplemented'); }, triggers: () => { 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'); }, }, (hasProcess ? { inputOf: async (record) => { const results = await readProcesses({ params: { observedInputs: record.id } }); return results.edges.pop()['node']; }, outputOf: async (record) => { const results = await readProcesses({ params: { observedOutputs: record.id } }); return results.edges.pop()['node']; }, } : {}), (hasAgent ? { provider: async (record) => { return readAgent(record, { id: record.provider }); }, receiver: async (record) => { return readAgent(record, { id: record.receiver }); }, inScopeOf: async (record) => { return (await Promise.all((record.inScopeOf || []).map((address) => readAgent(record, { address })))); }, } : {}), (hasFulfillment ? { fulfills: async (record) => { const results = await readFulfillments({ params: { fulfilledBy: record.id } }); return extractEdges(results); }, } : {}), (hasSatisfaction ? { satisfies: async (record) => { const results = await readSatisfactions({ params: { satisfiedBy: record.id } }); return extractEdges(results); }, } : {}), (hasResourceSpecification ? { resourceConformsTo: async (record) => { // record isn't quite an `EconomicEvent` since it stores ids for linked types, not the type itself, right? return (await readResourceSpecification({ address: record.resourceConformsTo })).resourceSpecification; }, } : {}), (hasAction ? { action: async (record) => { return (await readAction({ id: record.action })); }, } : {}), (hasAgreement ? { realizationOf: async (record) => { return readAgreement(record, { id: record.realizationOf }); }, } : {}), (hasHistory ? { revision: async (record, args) => { return (await readRevision(args)).economicEvent; }, } : {})); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvbm9taWNFdmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9lY29ub21pY0V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQTRILE1BQU0sYUFBYSxDQUFBO0FBQ25NLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFvQjFELE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxlQUFlLE1BQU0sZ0NBQWdDLENBQUE7QUFHNUQsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDaEcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFB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QUNQLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNYLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBeUMsRUFBbUIsRUFBRTtZQUMzRSxPQUFPLENBQUMsTUFBTSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNsRCxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ1AsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ2QsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFxQixFQUFzQixFQUFFO1lBQ2pFLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUM1RCxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ1AsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ1osUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFxQixFQUFFLElBQTJDLEVBQTBCLEVBQUU7WUFDN0csT0FBTyxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFBO1FBQ2pELENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDUixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvbHZlcnMgZm9yIEVjb25vbWljRXZlbnQgZmllbGRzXG4gKlxuICogQHBhY2thZ2U6IEhvbG9SRUFcbiAqIEBzaW5jZTogICAyMDE5LTA4LTI3XG4gKi9cblxuaW1wb3J0IHsgRE5BSWRNYXBwaW5ncywgREVGQVVMVF9WRl9NT0RVTEVTLCBWZk1vZHVsZSwgQnlJZCwgQnlSZXZpc2lvbiwgUmVhZFBhcmFtcywgUmVzb3VyY2VTcGVjaWZpY2F0aW9uQWRkcmVzcywgQWRkcmVzc2FibGVJZGVudGlmaWVyLCBBZ2VudEFkZHJlc3MsIEVjb25vbWljUmVzb3VyY2VBZGRyZXNzIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBleHRyYWN0RWRnZXMsIG1hcFpvbWVGbiB9IGZyb20gJy4uL2Nvbm5lY3Rpb24uanMnXG5cbmltcG9ydCB7XG4gIEFnZW50LFxuICBFY29ub21pY0V2ZW50LFxuICBFY29ub21pY0V2ZW50UmVzcG9uc2UsXG4gIEVjb25vbWljUmVzb3VyY2UsXG4gIEZ1bGZpbGxtZW50LFxuICBTYXRpc2ZhY3Rpb24sXG4gIFByb2Nlc3MsXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvbixcbiAgQWN0aW9uLFxuICBBZ3JlZW1lbnQsXG4gIEZ1bGZpbGxtZW50Q29ubmVjdGlvbixcbiAgU2F0aXNmYWN0aW9uQ29ubmVjdGlvbixcbiAgUHJvY2Vzc0Nvbm5lY3Rpb24sXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvblJlc3BvbnNlLFxuICBBY2NvdW50aW5nU2NvcGUsXG59IGZyb20gJ0B2YWx1ZWZsb3dzL3ZmLWdyYXBocWwnXG5cbmltcG9ydCBhZ2VudFF1ZXJpZXMgZnJvbSAnLi4vcXVlcmllcy9hZ2VudC5qcydcbmltcG9ydCBhZ3JlZW1lbnRRdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvYWdyZWVtZW50LmpzJ1xuaW1wb3J0IHJlc291cmNlUXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL2Vjb25vbWljUmVzb3VyY2UuanMnXG5pbXBvcnQgeyBGdWxmaWxsbWVudFNlYXJjaElucHV0LCBQcm9jZXNzU2VhcmNoSW5wdXQsIFNhdGlzZmFjdGlvblNlYXJjaElucHV0IH0gZnJvbSAnLi96b21lU2VhcmNoSW5wdXRUeXBlcy5qcydcblxuZXhwb3J0IGRlZmF1bHQgKGVuYWJsZWRWRk1vZHVsZXM6IFZmTW9kdWxlW10gPSBERUZBVUxUX1ZGX01PRFVMRVMsIGRuYUNvbmZpZzogRE5BSWRNYXBwaW5ncywgY29uZHVjdG9yVXJpOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFzSGlzdG9yeSA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSGlzdG9yeSlcbiAgY29uc3QgaGFzQWdlbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkFnZW50KVxuICBjb25zdCBoYXNSZXNvdXJjZVNwZWNpZmljYXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlJlc291cmNlU3BlY2lmaWNhdGlvbilcbiAgY29uc3QgaGFzQWN0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BY3Rpb24pXG4gIGNvbnN0IGhhc0Z1bGZpbGxtZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5GdWxmaWxsbWVudClcbiAgY29uc3QgaGFzU2F0aXNmYWN0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5TYXRpc2ZhY3Rpb24pXG4gIGNvbnN0IGhhc0FncmVlbWVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWdyZWVtZW50KVxuICBjb25zdCBoYXNQcm9jZXNzID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Qcm9jZXNzKVxuXG4gIGNvbnN0IHJlYWRSZXZpc2lvbiA9IG1hcFpvbWVGbjxCeVJldmlzaW9uLCBFY29ub21pY0V2ZW50UmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnb2JzZXJ2YXRpb24nLCAnZWNvbm9taWNfZXZlbnQnLCAnZ2V0X3JldmlzaW9uJylcbiAgY29uc3QgcmVhZEZ1bGZpbGxtZW50cyA9IG1hcFpvbWVGbjxGdWxmaWxsbWVudFNlYXJjaElucHV0LCBGdWxmaWxsbWVudENvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnb2JzZXJ2YXRpb24nLCAnZnVsZmlsbG1lbnRfaW5kZXgnLCAncXVlcnlfZnVsZmlsbG1lbnRzJylcbiAgY29uc3QgcmVhZFNhdGlzZmFjdGlvbnMgPSBtYXBab21lRm48U2F0aXNmYWN0aW9uU2VhcmNoSW5wdXQsIFNhdGlzZmFjdGlvbkNvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnb2JzZXJ2YXRpb24nLCAnc2F0aXNmYWN0aW9uX2luZGV4JywgJ3F1ZXJ5X3NhdGlzZmFjdGlvbnMnKVxuICBjb25zdCByZWFkUHJvY2Vzc2VzID0gbWFwWm9tZUZuPFByb2Nlc3NTZWFyY2hJbnB1dCwgUHJvY2Vzc0Nvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnb2JzZXJ2YXRpb24nLCAncHJvY2Vzc19pbmRleCcsICdxdWVyeV9wcm9jZXNzZXMnKVxuICBjb25zdCByZWFkQWN0aW9uID0gbWFwWm9tZUZuPEJ5SWQsIEFjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdzcGVjaWZpY2F0aW9uJywgJ2FjdGlvbicsICdnZXRfYWN0aW9uJylcbiAgY29uc3QgcmVhZFJlc291cmNlU3BlY2lmaWNhdGlvbiA9IG1hcFpvbWVGbjxSZWFkUGFyYW1zLCBSZXNvdXJjZVNwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdzcGVjaWZpY2F0aW9uJywgJ3Jlc291cmNlX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Jlc291cmNlX3NwZWNpZmljYXRpb24nKVxuICBjb25zdCByZWFkQWdlbnQgPSBhZ2VudFF1ZXJpZXMoZG5hQ29uZmlnLCBjb25kdWN0b3JVcmkpWydhZ2VudCddXG4gIGNvbnN0IHJlYWRBZ3JlZW1lbnQgPSBhZ3JlZW1lbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdyZWVtZW50J11cbiAgY29uc3QgcmVhZFJlc291cmNlID0gcmVzb3VyY2VRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnZWNvbm9taWNSZXNvdXJjZSddXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgcmVzb3VyY2VJbnZlbnRvcmllZEFzOiBhc3luYyAocmVjb3JkOiB7IHJlc291cmNlSW52ZW50b3JpZWRBczogRWNvbm9taWNSZXNvdXJjZUFkZHJlc3MgfSk6IFByb21pc2U8RWNvbm9taWNSZXNvdXJjZSB8IG51bGw+ID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQucmVzb3VyY2VJbnZlbnRvcmllZEFzKSByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZFJlc291cmNlKHJlY29yZCwgeyBpZDogcmVjb3JkLnJlc291cmNlSW52ZW50b3JpZWRBcyB9KVxuICAgICAgfSxcbiAgICAgIHRvUmVzb3VyY2VJbnZlbnRvcmllZEFzOiBhc3luYyAocmVjb3JkOiB7IHRvUmVzb3VyY2VJbnZlbnRvcmllZEFzOiBFY29ub21pY1Jlc291cmNlQWRkcmVzcyB9KTogUHJvbWlzZTxFY29ub21pY1Jlc291cmNlIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoIXJlY29yZC50b1Jlc291cmNlSW52ZW50b3JpZWRBcykgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRSZXNvdXJjZShyZWNvcmQsIHsgaWQ6IHJlY29yZC50b1Jlc291cmNlSW52ZW50b3JpZWRBcyB9KVxuICAgICAgfSxcbiAgICAgIHRyaWdnZXJlZEJ5OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB0cmFjazogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHRyYWNlOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0sXG4gICAgKGhhc1Byb2Nlc3MgPyB7XG4gICAgICBpbnB1dE9mOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxQcm9jZXNzPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IG9ic2VydmVkSW5wdXRzOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gcmVzdWx0cy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgfSxcblxuICAgICAgb3V0cHV0T2Y6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQpOiBQcm9taXNlPFByb2Nlc3M+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRQcm9jZXNzZXMoeyBwYXJhbXM6IHsgb2JzZXJ2ZWRPdXRwdXRzOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gcmVzdWx0cy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNBZ2VudCA/IHtcbiAgICAgIHByb3ZpZGVyOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxBZ2VudD4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFnZW50KHJlY29yZCwgeyBpZDogcmVjb3JkLnByb3ZpZGVyIH0pXG4gICAgICB9LFxuXG4gICAgICByZWNlaXZlcjogYXN5bmMgKHJlY29yZDogRWNvbm9taWNFdmVudCk6IFByb21pc2U8QWdlbnQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRBZ2VudChyZWNvcmQsIHsgaWQ6IHJlY29yZC5yZWNlaXZlciB9KVxuICAgICAgfSxcbiAgICAgIGluU2NvcGVPZjogYXN5bmMgKHJlY29yZDogeyBpblNjb3BlT2Y6IEFnZW50QWRkcmVzc1tdIH0pOiBQcm9taXNlPEFjY291bnRpbmdTY29wZVtdPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwoKHJlY29yZC5pblNjb3BlT2YgfHwgW10pLm1hcCgoYWRkcmVzcyk9PnJlYWRBZ2VudChyZWNvcmQsIHthZGRyZXNzfSkpKSlcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzRnVsZmlsbG1lbnQgPyB7XG4gICAgICBmdWxmaWxsczogYXN5bmMgKHJlY29yZDogRWNvbm9taWNFdmVudCk6IFByb21pc2U8RnVsZmlsbG1lbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZEZ1bGZpbGxtZW50cyh7IHBhcmFtczogeyBmdWxmaWxsZWRCeTogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNTYXRpc2ZhY3Rpb24gPyB7XG4gICAgICBzYXRpc2ZpZXM6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQpOiBQcm9taXNlPFNhdGlzZmFjdGlvbltdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkU2F0aXNmYWN0aW9ucyh7IHBhcmFtczogeyBzYXRpc2ZpZWRCeTogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNSZXNvdXJjZVNwZWNpZmljYXRpb24gPyB7XG4gICAgICByZXNvdXJjZUNvbmZvcm1zVG86IGFzeW5jIChyZWNvcmQ6IHsgcmVzb3VyY2VDb25mb3Jtc1RvOiBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzIH0pOiBQcm9taXNlPFJlc291cmNlU3BlY2lmaWNhdGlvbj4gPT4ge1xuICAgICAgICAvLyByZWNvcmQgaXNuJ3QgcXVpdGUgYW4gYEVjb25vbWljRXZlbnRgIHNpbmNlIGl0IHN0b3JlcyBpZHMgZm9yIGxpbmtlZCB0eXBlcywgbm90IHRoZSB0eXBlIGl0c2VsZiwgcmlnaHQ/XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZFJlc291cmNlU3BlY2lmaWNhdGlvbih7IGFkZHJlc3M6IHJlY29yZC5yZXNvdXJjZUNvbmZvcm1zVG8gfSkpLnJlc291cmNlU3BlY2lmaWNhdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNBY3Rpb24gPyB7XG4gICAgICBhY3Rpb246IGFzeW5jIChyZWNvcmQ6IHsgYWN0aW9uOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8QWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZEFjdGlvbih7IGlkOiByZWNvcmQuYWN0aW9uIH0pKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNBZ3JlZW1lbnQgPyB7XG4gICAgICByZWFsaXphdGlvbk9mOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxBZ3JlZW1lbnQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRBZ3JlZW1lbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucmVhbGl6YXRpb25PZiB9KVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNIaXN0b3J5ID8ge1xuICAgICAgcmV2aXNpb246IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQsIGFyZ3M6IHsgcmV2aXNpb25JZDogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPEVjb25vbWljRXZlbnQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmV2aXNpb24oYXJncykpLmVjb25vbWljRXZlbnRcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgKVxufVxuIl19